2014-04-08 76 views
2

我有一個數組,每個數組包含4個數組。如何在PHP中壓扁數組?

array(4) { 
    [0]=> 
    array(1) { 
    ["email"]=> 
    string(19) "[email protected]" 
    } 
    [1]=> 
    array(1) { 
    ["email"]=> 
    string(19) "[email protected]" 
    } 
    [2]=> 
    array(1) { 
    ["email"]=> 
    string(19) "[email protected]" 
    } 
    [3]=> 
    array(1) { 
    ["email"]=> 
    string(19) "[email protected]" 
    } 
} 

什麼是最好的(=最短,PHP本身的首選功能)的方式實現平坦化陣列,使其只包含電子郵件地址作爲值:

array(4) { 
    [0]=> 
    string(19) "[email protected]" 
    [1]=> 
    string(19) "[email protected]" 
    [2]=> 
    string(19) "[email protected]" 
    [3]=> 
    string(19) "[email protected]" 
} 

回答

6

在PHP 5.5你有array_column

$plucked = array_column($yourArray, 'email'); 

否則,請與array_map

$plucked = array_map(function($item){ return $item['email'];}, $yourArray); 
+2

或者如果你沒有PHP 5.5,你可以使用官方函數 – Populus

+0

的作者'array_column'的https://github.com/ramsey/array_column的用戶空間實現,這正是我所需要的。謝謝! –

+0

其中一天,我需要學習array_map ... – Mike

1

可以使用RecursiveArrayIterator。這甚至可以使多嵌套數組扁平化。

<?php 
$arr1=array(0=> array("email"=>"[email protected]"),1=>array("email"=>"[email protected]"),2=> array("email"=>"[email protected]"), 
    3=>array("email"=>"[email protected]")); 
echo "<pre>"; 
$iter = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr1)); 
$new_arr = array(); 
foreach($iter as $v) { 
    $new_arr[]=$v; 
} 
print_r($new_arr); 

OUTPUT:

Array 
(
    [0] => [email protected] 
    [1] => [email protected] 
    [2] => [email protected] 
    [3] => [email protected] 
) 
+0

也很好的方法,但我更喜歡@ moonwave99的答案,因爲它是一個精益的單線程。 –

+0

@GottliebNotschnabel,沒問題。我建議這是一個廣義的解決方案,因爲即使在多維數組上它也能工作。 –

+1

非常好,這可能有助於其他情況下的人。 –