字符串(文字数组)到数组转换

时间:2015-03-19 13:05:58

标签: php arrays string type-conversion

我有一个表格的字符串:

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 个答案:

答案 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;
        }
    }