2010-11-21 13 views
47

द्वारा सरणी मान प्राप्त करें मैं एक निर्मित php फ़ंक्शन के लिए खोज रहा हूं जो इनपुट के रूप में कुंजी की सरणी लेता है और मुझे संबंधित मान देता है।कुंजी

उदा। मैं एक निम्न सरणी

$arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400); 

है और मैं कुंजी कुंजी 2 और key4 तो मैं के लिए मूल्यों की आवश्यकता एक और array("key2", "key4") मैं एक समारोह है कि इस सरणी और इनपुट के रूप में पहली सरणी लेता है और मुझ में बहुत महत्व प्रदान करते हैं की जरूरत है प्रतिक्रिया। तो प्रतिक्रिया array(200, 400)

+1

मुझे समझ नहीं आता कि आप वास्तव में क्या पूछ रहे हैं। क्या आप उदाहरण इनपुट और आउटपुट के साथ स्पष्टीकरण दे सकते हैं? – BudgieInWA

उत्तर

94

मुझे लगता है कि आप array_intersect_key खोज रहे हैं। उदाहरण:

array_intersect_key(array('a' => 1, 'b' => 3, 'c' => 5), 
        array_flip(array('a', 'c'))); 

वापसी होगी:

array('a' => 1, 'c' => 5); 

आप array('a' => '', 'c' => '') बजाय array_flip(...) उपयोग कर सकते हैं यदि आप एक छोटे से सरल कोड करना चाहते हैं।

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

+0

अच्छा जवाब, क्या कोई छोटा रास्ता है? –

+0

ऐसा मत सोचो। आप array_flip (...) के बजाय सरणी ('a' => '', 'c' => '' 'लिख सकते हैं, लेकिन ऐसा लगता है कि मेरे लिए अलग-अलग अर्थपूर्ण है। – Andrew

+2

ध्यान दें कि यह एक सहयोगी सरणी देता है (इसलिए ओपी के उदाहरण में, यह 'सरणी (200,400) 'वापस नहीं करेगा, बल्कि इसके बजाय' सरणी '(key2' => 200, 'key4' => 400)'। – Amber

4
foreach($input_arr as $key) { 
    $output_arr[] = $mapping[$key]; 
} 

यह $output_arr में परिणाम मूल्यों, $input_arr में कुंजी की एक सूची $mapping में कुंजी> मान मैपिंग के आधार पर करने के लिए इसी होने देगा। यदि आप चाहते हैं, आप इसे एक समारोह में लपेट कर सकते हैं:

function get_values_for_keys($mapping, $keys) { 
    foreach($keys as $key) { 
     $output_arr[] = $mapping[$key]; 
    } 
    return $output_arr; 
} 

तो फिर तुम सिर्फ यह इतना की तरह कहेंगे:

$a = array('a' => 1, 'b' => 2, 'c' => 3); 
$values = get_values_for_keys($a, array('a', 'c')); 
// $values is now array(1, 3) 
4

एक विचार यह है कि लायक प्रस्तुत समाधान के बारे में किए जाने के लिए (array_intersect_key का उपयोग करना है), यदि दूसरे तर्क में डुप्लिकेट मान हैं तो सरणी_फ्लिप() पर जाने पर उन्हें अधिलेखित किया जाएगा, जाहिर है, सरणी सूचकांक अद्वितीय हैं।

और यह दूसरे दृष्टिकोण के साथ नहीं होता है क्योंकि कोई फ्लाइंग नहीं है, जो कुछ मामलों के लिए उपयुक्त बनाता है।

+0

+1 मैं आपकी व्याख्या –

13

एक वैकल्पिक जवाब:

$keys = array("key2", "key4"); 

return array_map(function($x) use ($arr) { return $arr[$x]; }, $keys); 
+0

अच्छा दूसरा! मैंने आपकी विधि का उपयोग किया और इसे एक फ़ंक्शन में लपेट लिया। –

+0

मुझे यह पसंद है क्योंकि यह मेरे लिए समझना बहुत आसान है। – racl101

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