2010-08-11 24 views
6

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

function array_subset($array, $keys) { 
    $result = array(); 
    foreach($keys as $key){ 
     $result[$key] = $array[$key]; 
    } 
    return $result; 
} 
+0

[PHP सरणी फ़ंक्शन जो संभावित कुंजी के लिए सबसेट देता है] का संभावित डुप्लिकेट [https://stackoverflow.com/questions/12543361/php-array-function-that-returns-a-subset-for-given-keys) –

उत्तर

10

array_diff_key और array_intersect_key शायद रहे हैं आप क्या चाहते हैं।

+1

फ़ंक्शन नाम एकवचन हैं। http://www.php.net/manual/en/ref.array.php PHP को उनके नामकरण सम्मेलनों को साफ करने की आवश्यकता है! – Keyo

+1

जब आप गैर-एसोसिएटिव सरणी में मानों की तालिका को देखने के लिए एक एसोसिएटिव सरणी में कुंजी मैप कर रहे हैं, तो आप यह सुनिश्चित करने के लिए 'array_flip' का उपयोग एक तर्क पर कर सकते हैं कि चौराहे/diff दोनों कुंजी या दोनों मानों पर आधारित है, न कि एक या दूसरे का मिश्रण। – danronmoon

4

मैं हमेशा यह भी चाहता हूं। अंडरस्कोर के pick के एक PHP संस्करण की तरह।

$a = ['foo'=>'bar', 'zam'=>'baz', 'zoo'=>'doo']; 

// Extract foo and zoo but not zam 
print_r(array_intersect_key($a, array_flip(['foo', 'zoo']))); 
/* 
Array 
(
    [foo] => bar 
    [zoo] => doo 
) 
*/ 

array_intersect_key रिटर्न पहला तर्क जिसका चाबियाँ हैं के सभी तत्वों:

यह बदसूरत और जवाबी सहज है, लेकिन क्या मैं कभी कभी ऐसा करते हैं (मैं इस किया जा सकता है prodigitalson पर क्या हो रही थी लगता है) है दूसरे तर्क में उपस्थित (और बाद के सभी तर्क, यदि कोई हो)। लेकिन, चूंकि यह चाबियों की चाबियों की तुलना करता है, इसलिए मैं सुविधा के लिए array_flip का उपयोग करता हूं। मैं अभी भी ['foo' => null, 'zoo' => null] का उपयोग कर सकता था लेकिन यह भी उलझन में है।

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