Объединение двух массивов по индексу
хорошо, если вам кажется, что это должно быть очень просто и выполняться такой функцией, как array_merge()
или array_merge_recursive
, но я не могу понять. У меня есть два простых массива, структурированных как (упрощенный) пример ниже. Я просто хочу объединить их в один массив на основе их индекса.
$array 1:
Array (
[0] => Array (
[ID] => 201
[latLng] => 45.5234515, -122.6762071
)
[1] => Array (
[ID] => 199
[latLng] => 37.7931446, -122.39466520000002
)
)
и так далее...
массив2$:
Array (
[0] => Array (
[distance] => 1000
[time] => 10
)
[1] => Array (
[distance] => 1500
[time] => 15
)
)
$desiredResult :
Array (
[0] => Array (
[ID] => 201
[latLng] => 45.5234515, -122.6762071
[distance] => 1000
[time] => 10
)
[1] => Array (
[ID] => 199
[latLng] => 37.7931446, -122.39466520000002
[distance] => 1500
[time] => 15
)
)
когда я пытаюсь объединить их с помощью функции слияния, я могу только сделать так:
$unDesiredResult:
Array (
[0] => Array (
[ID] => 201
[latLng] => 45.5234515, -122.6762071
)
[1] => Array (
[ID] => 199
[latLng] => 37.7931446, -122.39466520000002
)
[2] => Array (
[distance] => 1000
[time] => 10
)
[3] => Array (
[distance] => 1500
[time] => 15
)
)
мне нужно сделать петлю, чтобы протолкнуть второй набор в первый, или это можно сделать с помощью существующей функции?
4 ответов
Я не думаю, что есть функция, чтобы сделать это для вас, вам придется петли.
$result = array();
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other array
$result[$key] = $val + $val2; // combine 'em
}
или вы можете поместить данные в $array1, поэтому вам нужно сделать 3-й массив:
foreach($array1 as $key=>&$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other array
$val += $val2; // combine 'em
}
вам нужно будет использовать цикл. Попробуйте создать функцию:
function addArray( array &$output, array $input ) {
foreach( $input as $key => $value ) {
if( is_array( $value ) ) {
if( !isset( $output[$key] ) )
$output[$key] = array( );
addArray( $output[$key], $value );
} else {
$output[$key] = $value;
}
}
}
затем:
$combinedArray = array( );
addArray( $combinedArray, $array1 );
addArray( $combinedArray, $array2 );
пример массивы должны быть объединены:
[location_coordinates] => Array
(
[0] => 36.037939100000,-78.905221600000
[1] => 36.004398400000,-78.936084600000
)
[tm_field_reference_locations$field_location_address$city] => Array
(
[0] => Durham
[1] => Durham
)
[doctor_city] => Array
(
[0] => Durham
[1] => Durham
)
[tm_field_reference_locations$field_location_address$street] => Array
(
[0] => 407 Crutchfield Street
[1] => 40 Duke Medicine Circle
)
[tm_field_reference_locations$field_office_phone] => Array
(
[0] => 919-479-4120
[1] => 919-613-0444
)
[sm_field_reference_locations$title] => Array
(
[0] => Duke Regional Hospital Spine and Neurosciences
[1] => Duke Spine Center
)
когда вы петляете, как показано ниже:
$address= array();
for($n=0; $n<sizeof($kolDetails['location_coordinates']); $n++){
$address[$n]['org_institution_id']=$kolDetails['sm_field_reference_locations$title'][$n];
$address[$n]['longitude']=$kolDetails['location_coordinates'][$n];
$address[$n]['City']=$kolDetails['doctor_city'][$n];
$address[$n]['address1']=$kolDetails['tm_field_reference_locations$field_location_address$street'][$n];
$address[$n]['phone_number']=$kolDetails['tm_field_reference_locations$field_office_phone'][$n];
}
$kolextra['adress']=$address;
pr($kolextra['adress']);
$address = array();
Я бы это немного по-другому с интервалом. Это предполагает, что ваши значения всегда заблокированы и что первая запись array1 всегда соответствует первой записи array2:
$i = 0; // sets counter
$end = count($array1); // finds record number
while($i <= $end){ //for each record in the array
$array1[$i]['distance'] = $array2[$i]['distance']; //match up array values
$array1[$i]['time'] = $array2[$i]['time']; //match up array values
$i++; //iterate
}
Удачи!