我有一个表格的字符串:
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,但是他们都没有看到变量是字符串以外的任何东西。请帮忙!
答案 0 :(得分:1)
实现目标的一种方法是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 :(得分:0)
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;
}
}