Мне нужен результат массива, который выравнивается следующим образом:
$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"]
json. К счастью, решение Юстинаса сработало. Но если вы знаете о решении с использованием чистых методов сбора данных Larvel, вы можете опубликовать его, я могу попробовать позже. Хотя я пробовал Flatten() и другие вещи, но в данном случае это не сработало.






Каждый элемент вашего массива представляет собой массив 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()
Я не разбираюсь в Laravel, но в Eloquent столбец определяется как строка или JSON?