2011-11-01 14 views
7

द्वारा PHP विलय सरणी मुझे पता है कि यह foreach, फिर while -> सूची, आदि प्रक्रिया, (मैंने इसे पहले ही पूरा कर लिया है) के साथ आसानी से पूरा किया है, हालांकि मुझे लगता है कि मेरा कोड थोड़ा गंदा है और यह नहीं करतामूल्य

मैं दो सरणियों कि इस तरह दिखना है:

 
[0] (Array)#2 
    [rank] "579" 
    [id] "1" 
[1] (Array)#4 
    [rank] "251" 
    [id] "2" 

[0] (Array)#2 
    [size] "S" 
    [status] "A" 
    [id] "1" 
[1] (Array)#15 
    [size] "L" 
    [status] "A" 
    [id] "2" 

और मैं एक के रूप में की जरूरत है 'टी सबसे अच्छा समाधान की तरह लग रही है ... मैं देशी पीएचपी सरणी कार्यों का उपयोग करने के लिए निम्न करने के लिए देख रहा हूँ निम्नलिखित की तरह परिणाम कुछ:

 
[0] (Array)#2 
    [size] "S" 
    [status] "A" 
    [id] "1" 
    [rank] "579" 

[1] (Array)#2 
    [size] "L" 
    [status] "A" 
    [id] "2" 
    [rank] "251" 

क्या id वैल्यू (या अन्य अन्य) के साथ दो एरे मर्ज करने में सक्षम होने का कोई तरीका है foreach एस के अंतहीन सेट में जाये बिना?

+0

दोनों एरे में एक ही इंडेक्स पर एक ही आईडी वाले तत्व हैं? दूसरे शब्दों में, यदि आईडी 5 वाला तत्व पहले सरणी में इंडेक्स 3 पर है, तो यह दूसरी सरणी में इंडेक्स 3 पर भी होगा? – deviousdodo

उत्तर

13

उपयोग array_merge_recursive()

$array = array_merge_recursive($array1, $array2); 

या अपना स्वयं का कार्य करना (यह तेजी से हो सकता है)

function my_array_merge(&$array1, &$array2) { 
    $result = Array(); 
    foreach($array1 as $key => &$value) { 
     $result[$key] = array_merge($value, $array2[$key]); 
    } 
    return $result; 
} 
$array = my_array_merge($array1, array2); 
print_r($array); 
+0

बहुत बढ़िया !, इसके लिए धन्यवाद, एफवाईआई: फ़ंक्शन दृष्टिकोण तब तक उत्कृष्ट काम करता है जब तक आपको उन रिकॉर्ड्स को त्यागने की आवश्यकता होती है जो दोनों सरणी पर दोहराना नहीं है। –

+5

यह तकनीकी रूप से प्रश्न का उत्तर नहीं देता है। @OsvaldoM। आईडी के मूल्य के आधार पर शामिल होना चाहता है, चाबियों से नहीं। – Ray

0

ठीक है, चलो अपने सरणियों $ arr1 और $ arr2 कहा जाता है suppost करते हैं, आप ऐसा कर सकता है:

<?php 
$newarray = Array(); 
foreach ($arr1 as $element=>$value){ 
    $newarray = array_merge($arr1[$element],$arr2[$element]) 
} 
?> 
0

रे के रूप में एक टिप्पणी में देखा, स्वीकार किए जाते हैं जवाब वास्तव में इस सवाल का जवाब नहीं है। मैं एक जवाब खोजने में असमर्थ था, तो मैं निम्नलिखित छोटे उपयोगिता समारोह बनाया:

function array_merge_callback($array1, $array2, $predicate) { 
    $result = array(); 

    foreach ($array1 as $item1) { 
     foreach ($array2 as $item2) { 
      if ($predicate($item1, $item2)) { 
       $result[] = array_merge($item1, $item2); 
      } 
     } 
    } 

    return $result; 
} 

इस प्रकार के रूप में यह प्रयोग करें:

array_merge_callback($array1, $array2, function ($item1, $item2) { 
    return $item1['id'] == $item2['id']; 
}); 
0

एक और भाषाओं की तरह सरणियों विलय के लिए एक अच्छा एक है। ऐसा इसलिए है क्योंकि php में ऑटो नंबरिंग सरणी तत्व हैं, और विलय अलग-अलग तत्वों को कुंजी द्वारा विभाजित या प्रतिस्थापित करेगा।

अब, यह बदल गया है।

// array_fork 
    public static function array_fork() { 
    $args = func_get_args(); 
    $result = array(); 
    foreach ($args as $arr) { 
     is_array($arr) || exit('[' . __METHOD__ . '] Each item must be an array.'); 
     foreach ($arr as $key => $val) { 
     if (is_array($val)) { 
      // recursion 
      !isset($result[$key]) && $result[$key] = array(); 
      $result[$key] = self::array_fork($result[$key], $arr[$key]); 
      continue; 
     } 
     if (is_numeric($key)) { 
      if (!in_array($arr[$key], $result)) 
      $result[] = $arr[$key]; 
     } else 
      $result[$key] = $arr[$key]; 
     } 
    } 
    return $result; 
    } 
0
function custom_array_merge(&$array1, &$array2) { 
    $result = Array(); 
    foreach ($array1 as $key_1 => &$value_1) { 
     // if($value['name']) 
     foreach ($array2 as $key_1 => $value_2) { 
      if($value_1['name'] == $value_2['name']) { 
       $result[] = array_merge($value_1,$value_2); 
      } 
     } 

    } 
    return $result; 
} 

// दर्रा $ array1, & $ array2 और $ मान_2 [ 'नाम'] // नाम आधार पर बदल जिस पर यू मर्ज करना चाहते हैं।