2010-12-29 12 views
10

मैं इस प्रकार एक सरणी है:मैं किसी अन्य सरणी की कुंजी के मानों से सरणी कैसे बना सकता हूं?

$arr1 = array(
    0 => array(
    'name' => 'tom', 
    'age' => 22 
), 
    1 => array(
    'name' => 'nick', 
    'age' => 18 
) 
); 

हालांकि मैं सभी के नाम के होते हैं जो इसे से एक सरणी बनाना चाहते हैं, तो यह हो जाएगा:

$arr2 = array('tom', 'nick'); 

मैं array_filter() पर ध्यान दिया है, लेकिन यह काम नहीं करेगा क्योंकि यह एक बहु-आयामी सरणी है!

प्रश्न

मैं एक बहु-आयामी सरणी से एक विशिष्ट कुंजी (name) के मूल्यों के साथ एक सरणी बना सकते हैं कैसे?

$arr2 = array_map(function($person) { 
    return $person['name']; 
}, $arr1); 

लेकिन अगर आप एक PHP < 5.3 का उपयोग कर रहे हैं, यह बहुत एक सरल पाश उपयोग करने के लिए आसान है, array_map() के बाद से: PHP के

उत्तर

23

नए संस्करण में एक समारोह अभिव्यक्ति एक समारोह नाम के बजाय साथ array_map() का उपयोग करने दें इस सरल ऑपरेशन के लिए एक (शायद वैश्विक) फ़ंक्शन को परिभाषित करने की आवश्यकता होगी।

$arr2 = array(); 

foreach ($arr1 as $person) { 
    $arr2[] = $person['name']; 
} 

// $arr2 now contains all names 
+1

जटिल लूप की तुलना में वैश्विक फ़ंक्शन बनाने के लिए अभी भी सक्षम है। – Christian

+0

@ क्रिस्टियन साइबर्रास: सच है, लेकिन यह अनियंत्रित माइक्रो-फ़ंक्शंस के साथ नामस्थान को प्रदूषित करता है। लूप यहां _that_ जटिल नहीं है। यह एक बहुत ही सरल पुनरावृत्ति है (यह मानते हुए कि प्रारंभिक सरणी में भारी मात्रा में डेटा नहीं है)। – jwueller

+1

वास्तव में, के लिए .. प्रत्येक तेज है। इसका परीक्षण किया और यह 2 - 3x तेज लगता है। आपको यह नहीं बता सका कि क्यों .... –

3
$array = array(0 => array('name' => 'tom', 'age' => 22), 1 => array('name' => 'nick', 'age' => 18)); 
foreach($array as $arr => $a){ 
    $names[] = $array[$arr]["name"]; 
} 

print_r($names); //Array ([0] => tom [1] => nick) 
8

यह अभी भी अधिक सरल तरीके से किया जा सकता है array_coulmn

$arr2= array_column($arr1, 'name'); 

print_r($arr2); //Array ([0] => tom [1] => nick) 

array_column का उपयोग करके एक उप सरणी के स्तंभ प्राप्त करने के लिए प्रयोग किया जाता है।

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