Converting php array of arrays into single array

Viewed 44755

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 objects that have a common attribute?

11 Answers

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);

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);
Related