Частично сглаживание многомерного массива - PullRequest
1 голос
/ 01 июня 2011

Какой будет хороший способ преобразовать массив, который выглядит следующим образом:

Array (
    [0] = Array (
            [0] = Array (
                    [key] = val
                    [key2] = val2
                )

        )
    [1] = Array (
            [0] = Array (
                    [key] = val
                    [key2] = val2
                )

        )
)

до

Array (
    [0] = Array (
            [key] = val
            [key] = val2
        )
    [1] = Array (
            [key] = val
            [key] = val2
        )
)

Ответы [ 5 ]

5 голосов
/ 01 июня 2011

Это может быть довольно аккуратный способ сделать это

$output=array_map('array_shift', $input);

При этом используется array_map для вызова array_shift для каждого каждого элемента входного массива, что даст вам первый элемент каждого подмассива! Хорошая маленькая строчка, нет?

Как ни крути, это не очень эффективно, так как array_shift выполняет больше работы, чем нам нужно - простой цикл на самом деле намного быстрее (я только что сделал быстрый тест для массива с 1000 элементов, и это было примерно в 6 раз быстрее)

$output=array();
foreach ($input as $element){
    $output[]=$element[0];
}
1 голос
/ 01 июня 2011
$new=array();
foreach($array as $a){
  $new[]=array_shift($a);
}
0 голосов
/ 31 июля 2017

Я думаю, что все обдумали это. Это именно то, что делает array_column().

Код: ( Демо )

$array=[
    [
        ['key'=>'val','key2'=>'val2']
    ],
    [
        ['key'=>'val','key2'=>'val2']
    ]
];
var_export(array_column($array,0));

Выход:

array (
  0 => 
  array (
    'key' => 'val',
    'key2' => 'val2',
  ),
  1 => 
  array (
    'key' => 'val',
    'key2' => 'val2',
  ),
)
0 голосов
/ 01 июня 2011

Если ваш массив $my_array и имеет 2 элемента, вы можете:

$my_array = array_merge($my_array[0], $my_array[1]);

Надеюсь, это помогло.

0 голосов
/ 01 июня 2011
$new=array();
foreach ($array as $a){
$new[]=$a[0];
}

print_r($new);
...