Подтвердить что ты не робот

Преобразование массива php массивов в один массив

У меня есть массив, значения которого представляют собой все массивы определенного формата, которые выглядят следующим образом:

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

и я хотел бы иметь это:

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

Я могу сделать это вручную с помощью цикла, но есть ли лучший способ? Если нет, возможно ли это сделать для массива объектов, которые имеют общий атрибут?

4b9b3361

Ответ 1

Так как PHP 5.5.0 есть встроенная функция array_column, которая делает именно это.

Ответ 2

зачем усложнять вещи?

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

Ответ 3

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

Ответ 4

Если вы используете PHP 5.3, вы можете использовать array_walk_recursive и закрытие (закрытие может быть заменено нормальной функцией, если ваша версия PHP и lt; 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)

Ответ 5

Для других читателей, таких как я, если ключ username отличается для каждого внутреннего массива, и вы хотите сгладить его, используйте это:

call_user_func_array('array_merge', $the_array);

Обратите внимание, что ключи должны быть разными. Как это:

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

После запуска кода у вас есть это:

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

Ответ 6

Начиная с PHP 5.6 вы можете использовать оператор splat:

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

Ответ 7

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

Если вы используете объекты, вы можете просто изменить return $auser["username"]; на return $auser->get_username();

Ответ 8

Попробуйте этот код:

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

Ответ 9

Попробуйте следующее:

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

Ответ 10

Если вам не нужны клавиши:

$new_array = array();

foreach($array as $v) {

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

Ответ 11

Для тех, кто использует composer:

  • если <= php5.5 array_column можно использовать
  • if > php5.5 доступные полиполки, такие как https://github.com/symfony/polyfill/tree/master/src/Php55. Как только вы composer install symfony/polyfill-php55, вы можете просто вызвать array_column, как если бы ваш php5.4 или ниже имел его.