#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()
, что в любом случае происходит с вашей строкой.