2013-01-24 17 views
1

的所有子陣列的所有第n個位置的元素是否有工作像下面combine_subarrays本機的功能?本土的方式來獲得一個二維數組

$foo = array(
    array(1,2,3), 
    array(4,5,6), 
    array(7,8,9) 
); 

$n = 1; // desired element's position in each subarray 
$bar = combine_subarrays($foo, $n); 

// Result: $bar is array of all elements in 1st positions - [2,5,8] 

現在,我通過$ FOO的foreach和$ n個元素推到一個新的數組,然後將其返回。如果有一種原生的方式來做到這一點,那會更好。

回答

1

全球參考$ N一個快速的解決辦法是:

$n = 1; 
$bar = array_map(function($item) { 
     global $n; 
     return $item[$n]; 
    }, 
    $foo); 

,其結果是:

Array ([0] => 2 [1] => 5 [2] => 8) 
+0

如果您已經有一個匿名函數,最好使用閉包特性而不是全局變量'array_map(function($ item)use(&$ n)'' –

1

沒有函數,它正是如此,但幾種方法使用數組函數而不是寫循環。例如array_reduce *:

$bar = array_reduce($foo, function(&$result, $item) use ($n) { 
    $result[] = $item[$n] 
}); 

** array_map可能是更好的選擇,它也保留了原始密鑰。請參閱answer by @zeldi *

相關問題