Метод flatten
Метод flatten класса Arr преобразует многомерный массив в одномерный, рекурсивно извлекая все вложенные элементы. Метод принимает массив в качестве первого параметра и возвращает новый плоский массив. Вторым параметром можно указать глубину вложения, до которой нужно производить преобразование. Если глубина не указана, метод преобразует все уровни вложенности.
Синтаксис
<?php
use Illuminate\Support\Arr;
Arr::flatten($array);
Arr::flatten($array, $depth);
?>
Пример
Преобразуем многомерный массив с числами в плоский:
<?php
use Illuminate\Support\Arr;
$arr = [1, 2, [3, 4], [5, [6, 7]]];
$res = Arr::flatten($arr);
print_r($res);
?>
Результат выполнения кода:
[1, 2, 3, 4, 5, 6, 7]
Пример
Преобразуем многомерный массив со строками в плоский:
<?php
use Illuminate\Support\Arr;
$arr = ['a', 'b', ['c', 'd'], ['e', ['f', 'g']]];
$res = Arr::flatten($arr);
print_r($res);
?>
Результат выполнения кода:
["a", "b", "c", "d", "e", "f", "g"]
Пример
Используем параметр глубины для ограничения уровня вложенности:
<?php
use Illuminate\Support\Arr;
$arr = [1, 2, [3, 4], [5, [6, 7]]];
$res = Arr::flatten($arr, 1);
print_r($res);
?>
Результат выполнения кода:
[1, 2, 3, 4, 5, [6, 7]]
Пример
Работа с ассоциативным массивом. Ключи при преобразовании не сохраняются:
<?php
use Illuminate\Support\Arr;
$arr = [
'user' => ['name' => 'abcde', 'age' => 25],
'profile' => ['city' => 'city', 'hobbies' => ['reading', 'sports']]
];
$res = Arr::flatten($arr);
print_r($res);
?>
Результат выполнения кода:
["abcde", 25, "city", "reading", "sports"]
Пример
Преобразование массива с разными типами данных:
<?php
use Illuminate\Support\Arr;
$arr = [
[true, false],
['text', 123],
[null, [3.14, 'pi']]
];
$res = Arr::flatten($arr);
print_r($res);
?>
Результат выполнения кода:
[true, false, "text", 123, null, 3.14, "pi"]