2010-02-18 261 views
22

我有一个数组,其值是看起来像这样的特定格式的所有阵列:转换阵列的PHP的阵列分成单个阵列

Array 
(
    [0] => Array 
      (
       [username] => John 
      )  
    [1] => Array 
      (
       [username] => Joe 
      ) 
    [2] => Array 
      (
       [username] => Jake 
      ) 
) 

,我希望有这样的:

Array 
(
    [0] => John 
    [1] => Joe 
    [2] => Jake 
) 

我可以用循环手动执行此操作,但有没有更好的方法?如果没有,是否可以对具有共同属性的对象数组执行此操作?

回答

28

自PHP 5.5.0起,有一个内置函数array_column,它正是这样做的。

+0

如果您使用PHP 5.3或5.4,您可以随时使用[此库](http://benramsey.com/blog/2013/07/the-array-column-php-userland-library/)[(open -source)](https://github.com/ramsey/array_column)。 – 2014-04-14 08:43:46

+3

如何使用array_column如果我没有特定的键为我的数组。它在php中提供的默认键 – Dinesh 2016-03-24 16:05:40

27

为什么复杂的东西?

foreach($array as $k=>$v) { 
    $new[$k] = $v['username']; 
} 
2

如果你使用PHP 5.3,你可以使用array_walk_recursive和封闭(封闭可以通过正常的功能,如果你的PHP版本< 5.3代替):

function arrayFlatten(array $array) { 
    $flatten = array(); 
    array_walk_recursive($array, function($value) use(&$flatten) { 
     $flatten[] = $value; 
    }); 

    return $flatten; 
} 

$nested = array(
    array('username' => 'John'), 
    array('username' => 'Joe'), 
    array('username' => 'Jake'), 
); 

$flattened = arrayFlatten($nested); 

var_dump($flattened) 

array 
    0 => string 'John' (length=4) 
    1 => string 'Joe' (length=3) 
    2 => string 'Jake' (length=4) 
+0

函数arrayFlatten(array $ array)应该是arrayFlatten(array $ nested)。 – user1794918 2016-08-30 12:01:47

0
$new = array_map(create_function('$auser', 'return $auser["username"];'), $array); 

如果使用对象,你可以只改变return $auser["username"];return $auser->get_username();

0

试试这个代码:

foreach ($arr as $key => $val) 
{ 
    sort($val); 
    $new = array_merge($val, $new); 
} 
print_r ($new); 
0

试试这个:

$list=array(); 
foreach($array as $v) { 
    array_push($list, $v['username']); 
} 
0

如果你不关心键:

$new_array = array(); 

foreach($array as $v) { 

    $new_array[] = $v['username'] 
} 
2
$new_array = array_column($last_array, 'username'); 
0

对于那些正在使用composer谁:

  1. 如果< = php5.5 array_column可以使用
  2. 如果> php5.5可用polyfills如https://github.com/symfony/polyfill/tree/master/src/Php55可以使用。一旦你composer install symfony/polyfill-php55,那么你可以打电话array_column就好像你的php5.4或以下有它。