#php #arrays
#php #массивы
Вопрос:
Есть ли какая-либо возможность преобразовать строку в массив без использования danger eval
?
Я не хочу, чтобы решение использовало eval
, как показано ниже
eval("$a=array(1,2,3,4);");
print_r($a);
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Например, у меня есть строка, подобная приведенной ниже
$my_string_form='array(
"col1"=>"name",
"input"=>array(),
"parameters"=>array(
"default"=>"xyz",
"other"=>array(),
"something"=>new stdClass()
)
)
';
Я хотел бы проверить, правильно ли она определена или нет, если она определена правильно, я хотел бы получать доступ к элементам массива один за другим
if($real_array=somelogic_to_validate($my_string_form))
{
// Valid array fine, do some work on it
foreach($real_array as $key =>$v)
{
}
}else
{
die("Bad string received");
}
Комментарии:
1. Не могли бы вы описать, как вы получаете массив в виде строки $my_string_form в первую очередь? Возможно, есть способ получить лучшее форматирование для этого массива, например, в JSON. Как правило, это плохая идея обрабатывать массивы подобным образом, и почти всегда есть способ получше, давайте найдем его 🙂
2. К сожалению, по какой-то причине
$my_string_form
у меня не может быть json, я знаю, что если бы это было там, я бы сделалjson_decode($my_string_form,true)
, поэтому ищу какой-нибудь анализатор3. PHP — это синтаксический анализатор, и его реализация является
eval
. Вам не обязательноeval
использовать строку напрямую.eval("$s = serialize($my_string_form);"); $a = unserialize($s);