У меня есть строка вида:
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, но ни один из них не видит переменную как что-либо кроме строки. Пожалуйста помоги!
Один из способов сделать это было бы просто 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);
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;
}
}