String "array" для реального массива

Теперь я получил строку массива, например:

$str = "array('a'=>1, 'b'=>2)"; 

Как преобразовать эту строку в реальный массив? Есть ли какой-нибудь «умный способ» для этого, другие, которые используют explode ()? Потому что массив «string» может быть очень сложным некоторое время.

Благодаря !

я не знаю, как это сделать (только злой eval() нужно избегать ).

но: откуда вы берете эту строку? это что-то, что вы можете затронуть? если это так, использование serialize() / unserialize() было бы намного лучше.

Используйте функцию «eval» php.

  eval("\$myarray = $str;"); 

Вы должны использовать eval() .

Лучший способ получить текстовое представление массива, для которого не требуется eval() для декодирования, используется json_encode() / json_decode() .

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

 $arr = eval($array_string); 

Если строка указана пользователем или другим ненадежным источником, вы должны избегать eval () при любых обстоятельствах !

Чтобы хранить массивы в строках, вы должны взглянуть на сериализацию и несериализацию .

Вы можете записать строку в файл, вставляя строку в определение функции внутри файла и указывая на расширение .php.

Затем вы включаете php-файл в свой текущий модуль и вызываете функцию, которая вернет массив.

Не используйте eval() в любом случае просто вызывайте strtoarray($str, 'keys') для массива с ключами и strtoarray($str) для массива, у которых нет ключей.

 function strtoarray($a, $t = ''){ $arr = []; $a = ltrim($a, '['); $a = ltrim($a, 'array('); $a = rtrim($a, ']'); $a = rtrim($a, ')'); $tmpArr = explode(",", $a); foreach ($tmpArr as $v) { if($t == 'keys'){ $tmp = explode("=>", $v); $k = $tmp[0]; $nv = $tmp[1]; $k = trim(trim($k), "'"); $k = trim(trim($k), '"'); $nv = trim(trim($nv), "'"); $nv = trim(trim($nv), '"'); $arr[$k] = $nv; } else { $v = trim(trim($v), "'"); $v = trim(trim($v), '"'); $arr[] = $v; } } return $arr; }