Преобразовать строку в которой заключен ассоциативный массив в массив 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() может быть очень опасной, поскольку позволяет выполнить произвольный код. Использование данной функции не рекомендуется. Если вы полностью убеждены, что нет другого способа, кроме использования этой конструкции, обратите особое внимание на то, чтобы не передавать какие-либо данные, предоставленые пользователем, без предварительной проверки.

→ Ссылка
Автор решения: Denis640Kb

Без 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));
→ Ссылка