PHP - दो ऐरे को एक सरणी में विलय करना (डुप्लिकेट भी निकालें)


109

नमस्ते मैं दो सरणियों को मर्ज करने का प्रयास कर रहा हूं और अंतिम एरे से डुप्लिकेट मान भी निकालना चाहता हूं।

यहाँ मेरा ऐरे 1 है:

Array
    (
    [0] => stdClass Object
    (
    [ID] => 749
    [post_author] => 1
    [post_date] => 2012-11-20 06:26:07
    [post_date_gmt] => 2012-11-20 06:26:07
)

और यह मेरी सरणी 2 है:

Array
(
[0] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

)

मैं array_mergeदोनों सरणियों को एक सरणी में विलय करने के लिए उपयोग कर रहा हूं । यह इस तरह से उत्पादन दे रहा है

Array
(
[0] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

[1] => stdClass Object
(
[ID] => 749
[post_author] => 1
[post_date] => 2012-11-20 06:26:07
[post_date_gmt] => 2012-11-20 06:26:07

)

मैं इन डुप्लिकेट प्रविष्टियों को हटाना चाहता हूं या विलय से पहले मैं इन्हें हटा सकता हूं ... आनंद मदद .. धन्यवाद !!!!!!!


क्योंकि आप $ array1 [0] और $ array2 [0] को $ array1 और $ array2 नहीं मिलाना चाहते हैं। प्रत्येक सरणी के पहले आइटम पर array_merge चलाने का प्रयास करें
Bgi

सरणी गतिशील है .. इसलिए यह हमेशा $ array1 [0] और $ array2 [0]
Ravi

वहाँ कुछ भी है जिसके साथ मैं एक सरणी के अंदर प्रत्येक वस्तु की आईडी की तुलना कर सकता हूं ???
रवि

1
मेरी पहली टिप्पणी को भूल जाओ जो काम नहीं करेगी क्योंकि आप जिस चीज़ को मर्ज करने की कोशिश कर रहे हैं वह एरे नहीं बल्कि ऑब्जेक्ट हैं। आपको इसे मैन्युअल रूप से करना होगा
Bgi

जवाबों:


235
array_unique(array_merge($array1,$array2), SORT_REGULAR);

http://se2.php.net/manual/en/function.array-unique.php


5
@ हेमंतक्षप> SORT_REGULAR के साथ यह त्रुटि दे रहा है:Catchable fatal error: Object of class stdClass could not be converted to string
रवि

4
यह ध्यान देने योग्य है कि array_unique फ़िल्टर किए गए ऐरे (सीधे पास किए गए ऐरे पैरामीटर पर कार्य करने के बजाय) को लौटाता है, इसलिए आपको इसका उपयोग करने से पहले परिणाम को संग्रहीत करने की आवश्यकता है
माइक

7
डिफ़ॉल्ट रूप से array_unique स्ट्रिंग मानों को स्ट्रिंग्स के रूप में उपयोग करने का प्रयास करता है। इसलिए @Ravi त्रुटि हुई। यदि आपका सरणी केवल तार है, तो आपको तीसरे तर्क की आवश्यकता नहीं है। यदि यह एक स्ट्रिंग नहीं है, या सामग्री को एक स्ट्रिंग में नहीं डाला जा सकता है, तो आपको SORT_REGULAR तर्क की आवश्यकता होगी।
डेविड बॉउम

@ हेमंतवाघ07 सरणी वस्तुओं के लिए, यदि हम उपयोगकर्ता को SORT_REGULARयह नहीं देते हैंRecoverable fatal error: Object of class stdClass could not be converted to string in...<path to file>
Mapmalith

7

यह दो एरे को मर्ज करेगा और डुप्लिकेट को हटा देगा

<?php
 $first = 'your first array';
 $second = 'your second array';
 $result = array_merge($first,$second);
 print_r($result);
 $result1= array_unique($result);
 print_r($result1);
 ?>

इस लिंक की कोशिश करें link1


7

जैसा कि पहले ही उल्लेख किया, array_unique () का उपयोग किया जा सकता है, लेकिन केवल सरल डेटा के साथ काम करते समय। वस्तुओं को संभालना इतना सरल नहीं है।

जब php सरणियों को मर्ज करने का प्रयास करता है, तो यह सरणी सदस्यों के मूल्यों की तुलना करने की कोशिश करता है। यदि कोई सदस्य एक वस्तु है, तो वह इसका मूल्य नहीं प्राप्त कर सकता है और इसके बजाय spl हैश का उपयोग करता है।यहाँ spl_object_hash के बारे में और पढ़ें।

सीधे शब्दों में कहा जाए तो आपके पास दो वस्तुएं हैं, एक ही वर्ग के उदाहरण हैं और यदि उनमें से एक दूसरे के लिए एक संदर्भ नहीं है - तो आप दो वस्तुओं को समाप्त करेंगे, चाहे उनके गुणों का कोई महत्व नहीं हो।

यह सुनिश्चित करने के लिए कि आपके पास मर्ज किए गए सरणी के भीतर कोई डुप्लिकेट नहीं है, Imho आपको अपने दम पर मामले को संभालना चाहिए।

इसके अलावा, आप का उपयोग कर, बहुआयामी सरणियों विलय करने के लिए जा रहे हैं पर विचार करें array_merge_recursive () से अधिक array_merge ()


4

का उपयोग करने का प्रयास करें array_unique()

यह आपके सरणियों की सूची के अंदर डुप्लिकेट किए गए डेटा को समाप्त करता है।


0

दो सरणी को मर्ज करने से आप डुप्लिकेट को नहीं हटाएंगे आप दो उदाहरणों से अद्वितीय प्राप्त करने के लिए नीचे दिए गए उदाहरण की कोशिश कर सकते हैं

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");

$result=array_diff($a1,$a2);
print_r($result);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.