0

I have an array that looks like this:

$array = array(
[0] => array( [key] => val1 ),
[1] => array( [key] => val2 ),
[2] => array( [key] => val3 ),
...
)

I want to make it look like this:

$array = array(
[0] => val1 ),
[1] => val2 ),
[2] => val3 ),
...
)

Obviously I could just loop through the array and construct a new array, but is there any more efficient way to do what I'm describing?

SheerSt
  • 2,931
  • 6
  • 22
  • 33

2 Answers2

3

Powered by trivial standard library knowledge:

$new_array = array_map(function($i) {
    return $i['key'];
}, $array);

or if you're using php >= 5.5

$new_array = array_column($array, 'key');

or if the key name is not known and you just want to make 2d array into 1d:

$new_array = call_user_func_array('array_merge', array_map('array_values', $array));

References:

zerkms
  • 240,587
  • 65
  • 429
  • 525
2

Powered by this answer:

<?php
$array = array(
  0 => array( 'key' => 'val1' ),
  1 => array( 'key' => 'val2' ),
  2 => array( 'key' => 'val3' ),
);
$new_array = array();
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($it as $v) {
  $new_array[] = $v;
}
print_r($new_array);

Demo

Community
  • 1
  • 1
John Conde
  • 212,985
  • 98
  • 444
  • 485