Laravel PHP — Преобразование строки в массив из БД

#php #arrays #database #laravel #parsing

Вопрос:

Я пытаюсь сделать что-то вроде этого:

 $variable = Model::where($data)->get();
 

$данные хранятся в базе данных в виде ['type' => 1, 'status' => 2]

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

 0 => "['type' => 1, 'status' => 2]"
 

Как я могу правильно проанализировать этот массив из переменной DB -> в php?

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

1. Это не десериализуемый формат. Вы должны написать для него пользовательский синтаксический анализатор, но эту конкретную строку можно оценить: $array = eval("return $data;");

2. Было бы лучше, если бы вы изменили способ хранения данных и вместо этого использовали что-то вроде JSON.

3. @rickdenhaan — о да, спасибо.

4. @NigelRen — Я согласен, спасибо, на самом деле JSON было бы проще управлять

Ответ №1:

Мне удалось исправить это, используя следующее:

 $data = "['type' => 1, 'status' => 2]";
$variable = Model::where(eval("return $data;"))->get();
 

Это будет работать должным образом.

Очищен и обновлен, как рекомендовал @rickdenhaan.

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

1. Просто краткое примечание: если вы определяете $data себя, как здесь, в этом примере кода, лучше избегать eval() и просто писать $data = ['type' => 1, 'status' => 2]; (без " пометок), тогда $data уже будет массив. Это в основном то eval() , что в любом случае происходит с вашей строкой.