Хорошо, если такое ощущение должно быть действительно простым и выполняться с помощью функции 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 ) )
и так далее …
$ array2:
Array ( [0] => Array ( [distance] => 1000 [time] => 10 ) [1] => Array ( [distance] => 1500 [time] => 15 ) )
$ wishResult:
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 ) )
Нужно ли мне перемещаться, чтобы вставить второй набор в первый, или это можно сделать с помощью существующей функции?
Я не думаю, что есть функция, чтобы сделать это для вас, вам придется зацикливаться.
$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, поэтому вам нужно сделать третий массив:
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();
Я бы сделал это несколько иначе с интервалом. Это предполагает, что ваши значения всегда заблокированы и первая запись массива 1 всегда соответствует первой записи массива2:
$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 }
Удачи!