in_array() ожидает, что параметр 2 будет массивом, объект задан

#arrays #laravel #pluck

#массивы #laravel #выщипывание

Вопрос:

я знаю, что это похоже на другой вопрос, но. что, если мы получим массив данных из базы данных и попытаемся сравнить эти данные?

 $x = Video::where('kursus_id', $data)->pluck('slug');
$z = Video::where('kelas_id', $data_id_kelas)
    ->where('mapel_id', $data_id_mapel)
    ->pluck('slug');

foreach ($z as $value) {
    if (in_array($value, $x)) {
    
    } else {
         echo $value.'<br>';
    }
}
  

это выдает мне ошибку типа in_array() expects parameter 2 to be array, object given .

но когда я пытаюсь изменить $ x и $ z на $ x = [«2»] $ z=[«1″,»2″,»3»] Это работает. и вывод 1 amp; 3 я думаю, когда я использую db и даю ему силу, это будет тот же результат, когда я использую обычный массив, например [«1″,»2″,»3»].

пожалуйста, поправьте меня, если мое мнение будет неправильным. cz я изучаю. Спасибо перед ответами

Комментарии:

1. это не массивы, это коллекции, которые являются объектами… laravel.com/docs/8.x/collections#available-methods некоторые из доступных методов в классе Collection … если вам нужен массив из коллекций, вы можете вызвать all() их

2. спасибо за исправление. и как превратить мои данные в массив?

3. но когда я использую весь его ход, например [{data }] и объект внутри массива

4. когда я использую, получаю всю свою очередь, например [[{ data }]]

5. как преобразовать мои данные в массив, подобный [ data]

Ответ №1:

in_array() это 2-й параметр req. массив, и вы предоставляете объект, вот почему эта ошибка

чтобы исправить это, вам нужно использовать функцию toArray() в laravel

 $x = Video::where('kursus_id', $data)->pluck('slug')->toArray();
  

затем вы можете использовать in_array($value, $x)