Метод flatten
Метод flatten применяется к коллекции и возвращает новый объект коллекции, содержащий все элементы из вложенных массивов или коллекций, преобразованные в одномерный массив. Первым параметром метод принимает глубину вложения, которую нужно преобразовать. По умолчанию параметр равен null, что означает преобразование всех вложенных уровней. Если передать 1, то будет преобразован только первый уровень вложения.
Синтаксис
<?php
collect($array)->flatten($depth);
?>
Пример
Давайте преобразуем многомерный массив в плоский:
<?php
use Illuminate\Support\Collection;
$array = [1, 2, [3, 4, [5, 6]]];
$res = collect($array)->flatten();
echo json_encode($res->all());
?>
Результат выполнения кода:
[1,2,3,4,5,6]
Пример
Давайте преобразуем массив с различными типами данных:
<?php
use Illuminate\Support\Collection;
$array = ['a', 'b', ['c', 'd', ['e']], 'f'];
$res = collect($array)->flatten();
echo json_encode($res->all());
?>
Результат выполнения кода:
["a","b","c","d","e","f"]
Пример
Давайте ограничим глубину преобразования только одним уровнем:
<?php
use Illuminate\Support\Collection;
$array = [1, 2, [3, 4, [5, 6]]];
$res = collect($array)->flatten(1);
echo json_encode($res->all());
?>
Результат выполнения кода:
[1,2,3,4,[5,6]]
Пример
Давайте преобразуем коллекцию объектов в плоский массив:
<?php
use Illuminate\Support\Collection;
$array = [
['name' => 'user1', 'age' => 25],
['name' => 'user2', 'age' => 30],
['name' => 'user3', 'age' => 35]
];
$res = collect($array)->flatten();
echo json_encode($res->all());
?>
Результат выполнения кода:
["user1",25,"user2",30,"user3",35]
Пример
Давайте используем метод flatten в реальном проекте на примере модели Article:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function getTags()
{
$articles = Article::all();
$tags = $articles->pluck('tags')->flatten()->unique()->values();
return response()->json($tags);
}
}
?>
Результат выполнения кода:
["laravel","php","vue","react","javascript"]
Смотрите также
-
метод
flatMap,
который применяет функцию к каждому элементу и преобразует результат в плоский массив -
метод
collapse,
который объединяет массив массивов в один плоский массив -
метод
Arr::flatten,
который делает то же самое, но для обычных массивов -
метод
collect,
который создает новый объект коллекции из массива