Преобразовать строку в которой заключен ассоциативный массив в массив PHP
Всем доброго дня. Столкнулся с задачей преобразования строки с массивом
$str = "array('3787' => array('3250', '3251'),'3245' => array('827', '3264'), '3788' => array(''))";
в обычный массив php
$arr = array('3787' => array('3250', '3251'),'3245' => array('827', '3264'), '3788' => array(''));
Входные строки могут быть другими. Как я могу это сделать? Всем заранее большое спасибо!
Ответы (2 шт):
Можете воспользоваться функцией eval
$arr = eval("return $str;");
Предостережение Языковая конструкция eval() может быть очень опасной, поскольку позволяет выполнить произвольный код. Использование данной функции не рекомендуется. Если вы полностью убеждены, что нет другого способа, кроме использования этой конструкции, обратите особое внимание на то, чтобы не передавать какие-либо данные, предоставленые пользователем, без предварительной проверки.
Без eval лучше, на мой взгляд, в данном случае так сделать:
<?php
$str = "array('3787' => array('3250', '3251'),'3245' => array('827', '3264'), '3788' => array(''))";
function AndreyCh($str)
{
$t1 = str_replace('array(', '', $str);
$t1 = str_replace(')', '}', $t1);
$t1 = str_replace('},', '|,', $t1);
$t1 = str_replace("'", '', $t1);
$t1 = str_replace("}", '', $t1);
$newstr = explode('|,', $t1);
$Result = array();
foreach ($newstr as $item) {
$t2 = explode(' => ', $item);
$t3 = explode(',', $t2[1]);
$Result[$t2[0]] = $t3;
}
return $Result;
}
print_r(AndreyCh($str));