преобразование php строки в массив без использования eval

#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);