2011-05-08 12 views
29

इसे कैसे बना सकता है array_merge() अलग-अलग मानों के साथ दो कुंजियों को ओवरराइट करता है लेकिन दो सरणी से एक ही कुंजी अनुक्रमणिका?संख्यात्मक कुंजी के साथ PHP array_merge

उदाहरण के लिए

, विलय:

[0] => 'whatever'

[0] => 'whatever', [1] => 'a', [2] => 'b'

साथ

[0] => 'whatever', [1] => 'a', [2] => 'b'

मूल रूप से मैं चाहता हूँ प्रस्तुत करना चाहिए उसी तरह यह बर्ताव करता है, तो सरणियों स्ट्रिंग कुंजी बाहवे को array_merge ...

उत्तर

60

+ ऑपरेटर का उपयोग करें।

+ ऑपरेटर के लिए array_merge की तुलना करें:

<?php 

$a1 = array(0=>"whatever",); 
$a2 = array(0=>"whatever",1=>"a",2=>"b"); 

print_r(array_merge($a1,$a2)); 
print_r($a1+$a2); 
?> 

आउटपुट:

Array 
(
    [0] => whatever 
    [1] => whatever 
    [2] => a 
    [3] => b 
) 
Array 
(
    [0] => whatever 
    [1] => a 
    [2] => b 
) 

+ ऑपरेटर अभी भी काम करता है अगर आपके साहचर्य सरणी संख्यात्मक कुंजी है बाहर के आदेश:

<?php 

$a1 = array(0=>"whatever",); 
$a2 = array(1=>"a",0=>"whatever",2=>"b"); 

print_r(array_merge($a1,$a2)); 
print_r($a1+$a2); 
?> 
,210

आउटपुट:

Array 
(
    [0] => whatever 
    [1] => a 
    [2] => whatever 
    [3] => b 
) 
Array 
(
    [0] => whatever 
    [1] => a 
    [2] => b 
) 

सूचना array_mergeमें इस मामले एक नई कुंजी बनाता है। वांछनीय नहीं है ...

+4

आप यह दिखाने के लिए अलग-अलग मानों का उपयोग करना चाहेंगे कि "+" बाएं सरणी मानों को संरक्षित करता है, जबकि array_merge सही सरणी मानों का उपयोग करता है (डुप्लिकेट कुंजी केस के लिए)। –

+0

नोट: यदि आप 'सरणी $ a1 + array $ a2' का उपयोग करते हैं - आपको सही डेटा मिलेगा, जहां कुंजी $ (2 अनुक्रमित सरणी) है, तो '$ a1' $ a2 मान ओवरराइड करेगा, लेकिन: json_encode()' वर्तमान योग का ऑब्जेक्ट वापस करेगा - सरणी नहीं !!! 'array_values ​​($ a1 + $ a2) 'shuffled परिणाम लौटाएगा, और इसी तरह, और इसी तरह ..., एक और लूप लिखने और मैन्युअल रूप से मर्ज करने के लिए बेहतर ... (मैंने इसे लिखने से पहले इसे चेक किया, बस एक मिनट पहले एक समस्या खोजने में कुछ परेशानी है क्यों जेएस प्लगइन काम नहीं करना चाहता ...) – LINKeRxUA

+0

@LINKeRxUA मैं उस विशिष्ट उपयोग मामले को संभालने के लिए छह-पंक्ति फ़ंक्शन जोड़ने के बजाय यूनियन के बाद सरणी पर 'ksort' चलाऊंगा। – Brilliand

7

सुंदर आसान मैन्युअल रूप से लिखने के लिए:

function array_merge_custom($first, $second) { 
    $result = array(); 
    foreach($first as $key => $value) { 
     $result[$key] = $value; 
    } 
    foreach($second as $key => $value) { 
     $result[$key] = $value; 
    } 

    return $result; 
} 

अद्यतन: यह अलग ढंग से संघ ऑपरेटर (return $first + $second;) में क्योंकि से बर्ताव करता है इस मामले में दूसरा सरणी जीतता है जब दोनों में एक ही कुंजी वाले तत्व होते हैं।

हालांकि, यदि आप तर्कों के स्थानों को स्विच करते हैं और पहले ऑपरेंड के रूप में संघर्ष के मामले में "जीत" चाहते हैं, तो आप वही व्यवहार प्राप्त कर सकते हैं। तो ऊपर दिया गया कार्य बिल्कुल return $second + $first; जैसा व्यवहार करता है।

+0

धन्यवाद गलत उपयोग करने के लिए की तुलना करें! इससे मुझे कोई अंत नहीं हुआ! – Compy

+0

यह बिल्कुल '$ दूसरा + $ पहले' जैसा नहीं है। मैं यहां काम करने के लिए स्वरूपण नहीं कर सकता, इसलिए मैं इसे स्पष्ट रखने के लिए एक उत्तर पोस्ट करूंगा। –

0

आप array_merge() का उपयोग कर सकते हैं और फिर array_unique() का उपयोग कर सकते हैं।

+0

यदि आपके मूल्यों में अद्वितीय नहीं होने का मौका है तो कोई अच्छा समाधान नहीं है। –

3
function array_merge_custom() 
{ 
    $array  = array(); 
    $arguments = func_num_args(); 
    foreach($arguments as $args) 
     foreach($args as $key => $value) 
      $array[$key] = $value; 
    return $array; 
} 
2

आप $a2+$a1 का उपयोग करना चाहिए array_merge($a1,$a2);

$a1 = array(
    'k1' => 1, 
    'k2' => 2, 
    'k3' => 3, 
); 

$a2 = array(
    'k1' => 11, 
    'k2' => 22, 
    'k4' => 44, 
); 

कोड के साथ एक ही परिणाम प्राप्त करने के लिए:

print_r(array_merge($a1,$a2)); 

आउटपुट:

Array ( 
    [k1] => 11 
    [k2] => 22 
    [k3] => 3 
    [k4] => 44 
) 

कोड:

print_r($a1+$a2); 

आउटपुट:

Array ( 
    [k1] => 1 
    [k2] => 2 
    [k3] => 3 
    [k4] => 44 
) 

कोड:

print_r($a2+$a1); 

आउटपुट:

Array ( 
    [k1] => 11 
    [k2] => 22 
    [k4] => 44 
    [k3] => 3 
) 
0
the solution could be this: 
function array_merge_custom($array1, $array2) { 
    $mergeArray = []; 
    $array1Keys = array_keys($array1); 
    $array2Keys = array_keys($array2); 
    $keys = array_merge($array1Keys, $array2Keys); 

    foreach ($keys as $key) { 
     $mergeArray[$key] = array_merge_recursive(isset($array1[$key]) ? $array1[$key] : [], isset($array2[$key]) ? $array2[$key] : []); 
    } 

    return $mergeArray; 
} 

$array1 = [ 
    '66_' => [ 
     'k1' => 1, 
     'k2' => 1, 
    ], 
    '67_' => [ 
     'k1' => 1, 
     'k2' => 1, 
    ], 
    '68_' => [ 
     'k1' => 1, 
     'k2' => 1, 
    ], 
    68 => [ 
     'k1' => 1, 
     'k2' => 1, 
    ] 
]; 
$array2 = [ 
    '66_' => [ 
     'a1' => 1, 
     'a2' => 1, 
    ], 
    '68_' => [ 
     'b1' => 1, 
     'b2' => 1, 
    ], 
    68 => [ 
     'b1' => 1, 
     'b2' => 1, 
    ] 
]; 
echo '<pre>'; 
print_r(array_merge_custom($array1, $array2)); 
0
$arrA = [10, 11, 12]; 
$arrB = [12, 13]; 

$arrCommon = array_keys(array_flip($arrA) + array_flip($arrB)); 

print_r($arrCommon); 
Array 
(
    [0] => 10 
    [1] => 11 
    [2] => 12 
    [3] => 13 
) 

की "+"

$arrCommon = $arrA + $arrB; 

print_r($arrCommon); 
Array 
(
    [0] => 10 
    [1] => 11 
    [2] => 12 
) 
संबंधित मुद्दे