Теперь я получил строку массива, например:
$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; }