Как сгладить коллекцию с элементами массива в Laravel

Мне нужен результат массива, который выравнивается следующим образом:

$result = ["1", "2", "3", "4", "5", "6", "7"];

У меня есть результат БД этого запроса:

    $articles = DB::table('articles')
        ->where('is_published', 'true')
        ->get()
        ->pluck('category');

Когда я делаю это с этим результатом:

    $unflattened_array = $articles->toArray();

    dd($unflattened_array);

Результат выглядит следующим образом:

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

    $flattened_array = array_merge(...$unflattened_array);

    dd($unflattened_array);

Я получаю это сообщение об ошибке в Laravel:

array_merge(): Argument #1 must be of type array, string given

Что я делаю не так?

Я хочу, чтобы массив выглядел так:

["2","3","4","5","6","8","22","45","46","70","100","102"," 105","106","107","205"]

Я не разбираюсь в Laravel, но в Eloquent столбец определяется как строка или JSON?

Nigel Ren 22.03.2024 07:44

json. К счастью, решение Юстинаса сработало. Но если вы знаете о решении с использованием чистых методов сбора данных Larvel, вы можете опубликовать его, я могу попробовать позже. Хотя я пробовал Flatten() и другие вещи, но в данном случае это не сработало.

kamilfromxyz 22.03.2024 07:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
144
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Каждый элемент вашего массива представляет собой массив JSON, поэтому вам необходимо сначала его декодировать:

foreach ($unflattened_array as $items) {
    array_push($flattened_array, ...json_decode($items));
}

$flattened_array = array_unique($flattened_array);

Пример

Чтобы обеспечить более ориентированный на Laravel подход с использованием коллекций:

$articles = DB::table('articles')
    ->where('is_published', 'true')
    ->get()
    ->pluck('category');

// Get the unique categegory IDs from articles.
$categoryIds = $articles
    ->map(fn ($json) => json_decode($json))
    ->flatten()
    ->unique();

Это вернет сглаженные уникальные идентификаторы категорий в виде объекта коллекции, который вы можете преобразовать в обычный массив, используя ->toArray()

Другие вопросы по теме