开发者

Converting php array of arrays into single array

开发者 https://www.devze.com 2022-12-20 09:08 出处:网络
I have an array whose values are all arrays of a specific format that looks like this: Array ( [0] => Array

I have an array whose values are all arrays of a specific format that looks like this:

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

and I would like to have this:

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

I can do this manually with a loop but is there a better way? If not, is it possible to do this for an array of object开发者_C百科s that have a common attribute?


Since PHP 5.5.0 there is a built-in function array_column which does exactly this.


why complicate things?

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


Since PHP 5.6 you can use the splat operator. In case array keys are numeric, you could use this:

$newArray = array_merge(...$oldArray);


$new_array = array_column($last_array, 'username');


For other readers, like myself, if the key username is different for each internal array, and you want to flatten it, use this:

call_user_func_array('array_merge', $the_array);

Note that the keys have to be different. Like this:

[
 0 => [
  'a' => 1
 ],
 1 => [
  'b' => 2
 ]
]

After running the code, you have this:

[
 'a' => 1,
 'b' => 2,
]


If you're using PHP 5.3 you can make use of array_walk_recursive and a closure (the closure can be replaced by a normal function if your PHP version < 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)


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

If using objects you could just change return $auser["username"]; to return $auser->get_username();


Try this code:

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


Try this:

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


If you don't care about the keys:

$new_array = array();

foreach($array as $v) {

    $new_array[] = $v['username']
}


For those who're using composer:

  1. if <=php5.5 array_column can be used
  2. if >php5.5 available polyfills such as https://github.com/symfony/polyfill/tree/master/src/Php55 can be used. Once you composer install symfony/polyfill-php55, then you can just call array_column as if your php5.4 or below had it.
0

精彩评论

暂无评论...
验证码 换一张
取 消