在php中将字符串转换为数组

时间:2014-02-13 06:28:55

标签: php arrays function multidimensional-array

我的字符串如下

["Day1"]["Morning"]=mutton&["Day1"]["Evening"]=Juice&["Day2"]["Morning"]=burger&["Day2"]["Evening"]=pizza 

我想将其转换为如下所示的数组

$arr["Day1"]["Morning"] = "mutton";
$arr["Day1"]["Evening"] = "Juice";
$arr["Day2"]["morning"] = "burger";
$arr["Day2"]["evening"] = "pizza";

我尝试了类似下面的内容。

$str = '["Day1"]["Morning"]=mutton&["Day1"]["Evening"]=Juice&["Day2"]["Morning"]=burger&["Day2"]["Evening"]=pizza';
$pieces = explode("&", $str);

foreach($pieces as $pie)
{
$arr.$pie;
}
var_dump($arr);

我知道上面的代码真的很愚蠢:/。有没有适当的解决方案呢?

2 个答案:

答案 0 :(得分:5)

你可以这样做......

<?php
$str='["Day1"]["Morning"]=mutton&["Day1"]["Evening"]=Juice&["Day2"]["Morning"]=burger&["Day2"]["Evening"]=pizza';
$arr = explode('&',$str);
foreach($arr as $v)
{
    $valarr=explode('=',$v);
    preg_match_all('/"(.*?)"/', $valarr[0], $matches);
    $narr[$matches[1][0]][$matches[1][1]]=$valarr[1];
}

print_r($narr);

<强> OUTPUT :

Array
(
    [Day1] => Array
        (
            [Morning] => mutton
            [Evening] => Juice
        )

    [Day2] => Array
        (
            [Morning] => burger
            [Evening] => pizza
        )

)

您可以像echo $arr["Day1"]["Morning"]那样打印mutton

Demo

答案 1 :(得分:4)

看起来它可以用parse_str()进行解析,但不能没有一些转换:

$str = '["Day1"]["Morning"]=mutton&["Day1"]["Evening"]=Juice&["Day2"]["Morning"]=burger&["Day2"]["Evening"]=pizza';

parse_str(preg_replace('/(?<=^|&)/', 'x', str_replace('"', '', $str)), $a);

var_dump($a['x']);

删除双引号,为每个条目添加前缀x,然后应用parse_str()。为了了解preg_replace()的作用,中间结果如下:

x[Day1][Morning]=mutton&x[Day1][Evening]=Juice&x[Day2][Morning]=burger&x[Day2][Evening]=pizza

解析上面的字符串会产生一个包含单个根元素x的数组。