2009-11-16 13 views
6

शायद मैं पागल जा रहा हूँ, लेकिन मैं शपथ ली हो सकता था जो किसी PHP मुख्य कार्य जो तर्क के रूप में दो सरणियों ले लिया था:कुछ हद तक सरल PHP सरणी चौराहे सवाल

$a = array('1', '3'); 
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis'); 

और एक चौराहे करता है जहां से मान सरणी $a सरणी $b में कुंजियों के साथ टक्कर के लिए जांच की जाती है। जैसे

array('1'=>'apples', '3'=>'kiwis'); 

कुछ रिटर्निंग इस तरह के एक समारोह में मौजूद हैं (जो मैं दस्तावेज में याद किया) करता है, या वहाँ एक ही बात को प्राप्त करने के लिए एक बहुत ही अनुकूलित तरीका है?

उत्तर

10

array_flip का उपयोग करके देखें {उनके मानों वाली कुंजियों स्विच} और फिर() अपने उदाहरण पर array_intersect का उपयोग करें:

$c = array_flip($b); // so you have your original b-array 
$intersect = array_intersect($a,c); 
+1

यह दिए गए उदाहरण के लिए काम करेगा, लेकिन $ b में डुप्लिकेट मानों की अनुमति नहीं देता है। मैं $ ए को फ़्लिप करने की विविधता करता हूं (क्योंकि इसे किसी भी तरह से चाबियाँ रखना है) और 'array_intersect_key ($ b, array_flip ($ a)) '। –

+0

डुप्लिकेट पर अच्छा बिंदु, उस – Raz

+6

'array_intersect_key ($ b, array_flip ($ a)) के बारे में नहीं सोचा था, 'नौकरी करने के लिए बाहर निकलता है। चीयर्स! –

2

मैं नहीं 100% स्पष्ट तुम क्या चाहते हूँ। क्या आप $ बी से KEYS के विरुद्ध $ एक से मूल्यों की जांच करना चाहते हैं?

कुछ है एक दूसरे को काटना कार्य:

http://php.net/manual/en/function.array-intersect.php http://www.php.net/manual/en/function.array-intersect-key.php

लेकिन संभवतः आप की जरूरत:

http://www.php.net/manual/en/function.array-intersect-ukey.php ताकि आप कुंजी और/या मूल्यों मिलान के लिए अपने स्वयं के समारोह को परिभाषित कर सकते हैं।

1

पहली सरणी पुनरावृति और दूसरी सरणी से संबंधित मानों प्राप्त करने के लिए एक सरल foreach कार्य करें:

$output = array(); 
foreach ($a as $key) { 
    if (array_key_exists($key, $b)) { 
     $output[$key] = $b[$key]; 
    } 
} 
0

बस Gumbo जवाब का एक परिवर्तन, और अधिक कुशल होना चाहिए के रूप में कुंजी पर परीक्षण प्रदर्शन कर रहे हैं लूप में प्रवेश करने से पहले।

$intersection = array_intersect($a, array_keys($b)); 
$result=array(); 
foreach ($intersection as $key) { 
    $result[$k]=$b[$k]; 
} 
संबंधित मुद्दे