2008-10-22 12 views
12

आप दो सरणी ($ ए और $ बी) की तुलना कैसे कर सकते हैं और सरणी $ ए पर अगले लूप के लिए पहले से मिलान करने वाले तत्वों को कम कर सकते हैं?दो सरणी की तुलना कैसे करें और अगले लूप के लिए मिलान तत्वों को कैसे हटाएं?

$A = array(1,2,3,4,5,6,7,8); 
$B = array(1,2,3,4); 

$C = array_intersect($A,$B); //equals (1,2,3,4) 
$A = array_diff($A,$B);  //equals (5,6,7,8) 

क्या यह सबसे आसान तरीका है या क्या किसी अन्य कार्य का उपयोग करने का कोई तरीका है जिसे मैंने नहीं सोचा है? मेरा लक्ष्य एक सरणी है जिसे मैं लूप कर सकता हूं, संबंधित सामग्री के समूह खींच रहा हूं (मैंने उन रिश्तों को कहीं और परिभाषित किया है) जब तक कि सरणी झूठी न हो।

+0

करने की कोशिश यह मुझे हो सकता है, लेकिन मुझे नहीं लगता प्रश्न बहुत स्पष्ट है। जैसा कि मैंने इसे पढ़ा है आप केवल array_diff ($ ए, $ बी) में रुचि रखते हैं (जो कि बहुत आसान लगता है)। या $ सी की गणना भी आवश्यक है? (यदि ऐसा है, तो आप array_diff ($ ए, $ बी) के बजाय array_diff ($ ए, $ सी) का उपयोग कर सकते हैं।) – mweerden

+0

नहीं, मैं $ ए और $ बी – kevtrout

उत्तर

11

आपको यह मिल गया है। बस array_diff या array_intersect का उपयोग करें। उससे ज्यादा आसान नहीं मिलता है।

संपादित करें: उदाहरण के लिए:

$arr_1 = array_diff($arr_1, $arr_2); 
$arr_2 = array_diff($arr_2, $arr_1); 

Source

+2

का चौराहे होने के लिए $ C घोषित कर रहा हूं [array_diff_assoc ] (http://www.php.net/manual/en/function.array-diff-assoc.php) यदि दो सरणी में मानों का क्रम महत्वपूर्ण है। – Duncanmoo

2

भी array_unique देखें। यदि आप दो सरणी को जोड़ते हैं, तो यह सभी डुप्लिकेट को यंक करेगा।

0

अरे, यहां तक ​​कि बेहतर समाधान: array _ uintersect. यह आपको array_intersect के अनुसार सरणी की तुलना करने देता है लेकिन फिर यह आपको कॉलबैक फ़ंक्शन के साथ डेटा की तुलना करने देता है।

0

इस

$a = array(0=>'a',1=>'x',2=>'c',3=>'y',4=>'w'); 
$b = array(1=>'a',6=>'b',2=>'y',3=>'z'); 
$c = array_intersect($a, $b); 

$result = array_diff($a, $c); 
print_r($result); 
2

प्रिय आसान और साफ रास्ता

$clean1 = array_diff($array1, $array2); 
$clean2 = array_diff($array2, $array1); 
$final_output = array_merge($clean1, $clean2); 
+0

यह उत्तर बेहतर है, क्योंकि यह मिलान सूचकांक पर सरणी तत्वों को फिर से व्यवस्थित करता है। स्टुअर्ट के उत्तर के विपरीत, जो मिलान सूचकांक से तत्वों को हटा देगा। तो यदि अनुक्रमणिका 1 पर कोई मिलान तत्व था, तो आप परिणाम सरणी में अनुक्रमणिका 1 तक पहुंचने का प्रयास करते हैं, यह त्रुटि फेंक देगा। – Ajji

संबंधित मुद्दे