2012-03-02 5 views
5

Được rồi, nếu cảm thấy như thế này thực sự đơn giản và được thực hiện bởi một hàm như array_merge() hoặc array_merge_recursive, nhưng tôi không thể hiểu được nó. Tôi có hai mảng đơn giản được cấu trúc giống như ví dụ (đơn giản) bên dưới. Tôi chỉ muốn kết hợp chúng thành một mảng dựa trên chỉ mục của chúng.Hợp nhất hai mảng theo chỉ mục

$ array 1:

Array ( 
    [0] => Array ( 
     [ID] => 201 
     [latLng] => 45.5234515, -122.6762071 
) 
    [1] => Array ( 
     [ID] => 199 
     [latLng] => 37.7931446, -122.39466520000002 
) 
) 

vân vân ...

$ array2:

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 
) 
) 

Khi tôi cố gắng kết hợp những sử dụng chức năng hợp nhất, tôi chỉ có thể có được điều này:

$ 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 
) 
) 

Tôi có cần phải lặp qua để đẩy tập thứ hai vào đầu tiên , hoặc điều này có thể được thực hiện với một chức năng hiện có?

Trả lời

4

Tôi không nghĩ rằng có một chức năng để làm điều này cho bạn, bạn sẽ phải lặp lại.

$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 
} 

Hoặc bạn có thể đẩy dữ liệu vào $ array1, vì vậy bạn cần phải thực hiện một mảng thứ 3:

foreach($array1 as $key=>&$val){ // Loop though one array 
    $val2 = $array2[$key]; // Get the values from the other array 
    $val += $val2; // combine 'em 
} 
+0

Vì vậy, tôi phải lặp qua (Tôi luôn luôn giả định có một cách nhanh hơn mà Tôi đang mất tích). Cảm ơn, điều này hoạt động hoàn hảo (như câu trả lời dưới đây, nhưng tôi sẽ cho đơn giản nhất). – Kerri

+0

@Kerri: Tôi không thể tìm thấy chức năng tích hợp có thể làm những gì bạn muốn. 'array_merge_recursive' không đưa ra kết quả mong muốn. –

+0

@Kerri: 'array_merge_recursive' sẽ hoạt động nếu mảng của bạn có [chuỗi khóa] (http://ideone.com/xZQYd) (không phải [phím số] (http: // ideone.com/s8mHI)); –

3

Bạn sẽ cần phải sử dụng một vòng lặp. Hãy thử tạo một hàm:

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; 
     } 
    } 
} 

Sau đó:

$combinedArray = array(); 
addArray($combinedArray, $array1); 
addArray($combinedArray, $array2); 
+0

+1 cho +1 cho +1 cho +1 cho ... đệ quy. –

+0

Sẽ không dễ dàng hơn khi thực hiện 'addArray ($ array1, $ array2);'? –

0

tôi muốn đi về điều này hơi khác với một khoảng thời gian. Điều này giả định giá trị của bạn luôn bị khóa và bản ghi đầu tiên của mảng 1 luôn tương ứng với bản ghi đầu tiên của mảng2:

$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 
} 

Chúc may mắn!

+1

Cảm ơn bạn. Điều này sẽ làm việc tốt quá, và các giả định sẽ làm việc trong trường hợp sử dụng của tôi. Nhưng thực tế có nhiều khóa/giá trị được đặt nhiều hơn trong mảng mẫu của tôi, vì vậy điều này sẽ kết thúc là cồng kềnh hơn đối với mã (và ít linh hoạt hơn). Nhưng sẽ tốt nếu các mảng của tôi thực sự đơn giản như trong ví dụ của tôi. – Kerri

+0

Cảm ơn bạn đã phản hồi! – AshBrad

2

dụ Mảng phải được sáp nhập:

[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 
           ) 

Khi bạn lặp như dưới đây:

 $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();