Преобразование строки (литерального массива) в массив

У меня есть строка вида:

string '["a"=>[10,20,30,40=>"Forty"],"b"=>[100,200,300,400=>"Four Hundred"],"c"=>[15]]' (length=78)

Мне нужно преобразовать это непосредственно в массив как

array (size=3)
'a' =>
array (size=4)
0 => int 10
1 => int 20
2 => int 30
40 => string 'Forty' (length=5)
'b' =>
array (size=4)
0 => int 100
1 => int 200
2 => int 300
400 => string 'Four Hundred' (length=12)
'c' =>
array (size=1)
0 => int 15

Я пробовал parse_str и json_encpde / decode и eval, но ни один из них не видит переменную как что-либо кроме строки. Пожалуйста помоги!

2

Решение

Один из способов сделать это было бы просто eval вещь

$string = '["a"=>[10,20,30,40=>"Forty"],"b"=>[100,200,300,400=>"Four Hundred"],"c"=>[15]]';
$array = eval("return $string");
print_r($array);

Имейте в виду, что оба эти решения на самом деле оценивают код PHP, который вы сами не написали. Если вы можете, я бы предложил сохранить эти данные в формате JSON или использовать serialize_array() вместо

Не удалось заставить этот пример работать, оставив его для архивных целей или для постороннего

Не могу проверить это прямо сейчас, но один из них может помочь вам, если вы используете версию PHP, которая поддерживает нотацию массива [].

$string = '["a"=>[10,20,30,40=>"Forty"],"b"=>[100,200,300,400=>"Four Hundred"],"c"=>[15]]';
file_put_contents('php://memory', $string);
$array = include 'php://memory';
print_r($array);
1

Другие решения

Try this hope will help this.
$input_string =  '["a"=>[10,20,30=>"test",40=>"Forty"],"b"=>[100,200,300,400=>"Four Hundred"],"c"=>[15]]'."<br/>";
$s1 = str_replace('],','-',str_replace(']]','',str_replace('[','',$input_string)));
$s2 = explode("-",$s1);
foreach ($s2 as $key => $value) {
$s3[] = explode("=>",str_replace('=>"','-"',$value));
$s4[$s3[$key][0]] = $s3[$key][1];

}
foreach($s4 as  $keys => $v) {
$value = explode(",",$v);
foreach($value as $val) {
if(strrchr($val,'-'))
{
$final[$keys][array_shift(explode("-",$val))] = end(explode("-",$val));
}
else
$final[$keys][] = $val;
}
}
0

По вопросам рекламы [email protected]