Оператор разбрасывания спешит на помощь.

Сглаживание одноуровневого массива

Я видел людей, использующих функцию array_merge в цикле вроде:

$lists = [
  [1, 2],
  [3, 4],
  [5, 6],
];
$merged = [];
foreach($lists as $list) {
    $merged = array_merge($merged, $list);
}
// $merged === [1, 2, 3, 4, 5, 6];

Это очень плохая практика, потому что это убийца производительности (памяти)!

Вместо этого вы должны использовать оператор распространения (в PHP с версии 5.6!):

$lists = [
  [1, 2],
  [3, 4],
  [5, 6],
];
$merged = array_merge(...$lists);
// === [1, 2, 3, 4, 5, 6];

Распаковка ассоциативного массива

Что, если бы у вас был ассоциативный массив вместо этого?

$lists = [
  'key-1' => [1, 2],
  'key-2' => [3, 4],
  'key-3' => [5, 6],
];

В этом случае вам нужно будет распаковать его значения:

$merged = array_merge(...array_values($lists));
// === [1, 2, 3, 4, 5, 6];

В функциональном программировании это называется выравнивание списка.

Никаких циклов и проблем с производительностью.

Сведение многоуровневого массива

Что, если вы хотите сгладить такой многоуровневый массив?

$lists = [[1], 2, [[3, 4], 5], [[[]]], [[[6]]], 7, 8, []];

Или как этот, даже с парами "ключ-значение"?

$lists = [
    'key-1' => [
        1,
        [2],
        'key-2' => [
            3,
            [
                'key-3' => [4, 5],
            ],
        ],
    ],
    6,
    'key-4' => [7, 8],
];

В этих случаях вы можете использовать внутреннюю стандартную библиотеку:

$merged = iterator_to_array(
    new RecursiveIteratorIterator(
        new RecursiveArrayIterator($lists)
    ),
    $use_keys = false
);
// $merged === [1, 2, 3, 4, 5, 6, 7, 8];

Заключение

Обычно достаточно знать, как сгладить «двухуровневый» массив:

$flattenList = array_merge(...array_values($lists));

В противном случае вам поможет внутренняя стандартная библиотека.

использованная литература