2012-03-02 16 views
5

द्वारा दो एरे विलय करना ठीक है, अगर ऐसा लगता है कि यह वास्तव में सरल और array_merge() या array_merge_recursive जैसे फ़ंक्शन द्वारा पूरा किया जाना चाहिए, लेकिन मैं इसे काफी समझ नहीं सकता। मेरे पास नीचे दिए गए (सरलीकृत) उदाहरण की तरह संरचित दो सरल सरणी हैं। मैं बस उन्हें अपने सूचकांक के आधार पर एक सरणी में विलय करना चाहता हूं।इंडेक्स

$ सरणी 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 
) 
) 

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

या तो आप एक 3 सरणी बनाने की जरूरत है आप $ array1 में डेटा धक्का कर सकते हैं,:

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

तो मैं के माध्यम से (मैं हमेशा वहाँ एक तेज तरीका है मान पाश की क्या ज़रूरत है कि मुझे याद आ रही है)। धन्यवाद, यह पूरी तरह से काम करता है (जैसा कि नीचे दिया गया जवाब हो सकता है, लेकिन मैं सबसे सरल के लिए जा रहा हूं)। – Kerri

+0

@ केरी: मुझे एक अंतर्निहित फ़ंक्शन नहीं मिला जो आप चाहते हैं। 'array_merge_recursive' वांछित आउटपुट नहीं देता है। –

+0

@ केरी: 'array_merge_recursive' काम करेगा यदि आपके सरणी [स्ट्रिंग कुंजी] (http://ideone.com/xZQYd) (नहीं [संख्यात्मक कुंजी] (http: // ideone।com/s8mHI)); –

3

आप एक पाश का उपयोग करना होगा।

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); 
+0

+1 के लिए +1 के लिए +1 के लिए +1 ... रिकर्सन। –

+0

केवल 'addArray ($ array1, $ array2) करना आसान नहीं होगा; '? –

0

मैं एक अंतराल के साथ कुछ अलग ढंग से इस बारे में जाना चाहते हैं। यह आपके मूल्यों हमेशा बंद हैं मान लिया गया है और 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 
} 

गुड लक!

+1

धन्यवाद। यह भी अच्छी तरह से काम करेगा, और धारणा मेरे उपयोग के मामले में काम करेगा। लेकिन वास्तव में एक गुच्छा अधिक कुंजी/मान हैं जो मेरे उदाहरण सरणी की तुलना में सेट हो जाते हैं, इसलिए यह कोड (और कम लचीला) के लिए अधिक बोझिल हो जाएगा। लेकिन अच्छा होगा अगर मेरे सरणी वास्तव में मेरे उदाहरण के रूप में सरल थे। – Kerri

+0

प्रतिक्रिया के लिए धन्यवाद! – AshBrad

2

उदाहरण सरणी विलय कर दिया जाना है:

[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(); 
संबंधित मुद्दे