如何将包含关联数组的字符串转换为关联数组类型?

时间:2018-01-19 17:11:00

标签: php arrays laravel-5

我有一个包含类似关联数组的字符串

$string = "['key1'=>'value1','key2'=>'value2','key3'=>'value3']";

我希望将它转换为关联数组,以便我可以遍历它。

有什么办法吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

非常简单的方法是将该字符串转换为json并解码

0    4
1    1
2    0
dtype: int32

Troubleshooting 405 Error

答案 1 :(得分:1)

您可以使用preg_match_all,如下所示:

$string = "['key1'=>'value1','key2'=>'value2','key3'=>'value3']";

preg_match_all("/'(?P<key>[-\w]+)'\s*=\>\s*'(?P<value>[-\w]+)'/", $string, $matches);

print_r($matches);

输出:

Array
(
    [0] => Array
        (
            [0] => 'key1'=>'value1'
            [1] => 'key2'=>'value2'
            [2] => 'key3'=>'value3'
        )

    [key] => Array
        (
            [0] => key1
            [1] => key2
            [2] => key3
        )

    [1] => Array
        (
            [0] => key1
            [1] => key2
            [2] => key3
        )

    [value] => Array
        (
            [0] => value1
            [1] => value2
            [2] => value3
        )

    [2] => Array
        (
            [0] => value1
            [1] => value2
            [2] => value3
        )

)

live here

需要注意的是[-\w]+匹配a-zA-Z0-9-_,因此这应该是键和值都是。您当然可以根据需要调整Regx。

现在,如果您想将它们放在更有用的格式中,可以添加:

 $output = array_combine($matches['key'],$matches['value']);

输出

Array
(
    [key1] => value1
    [key2] => value2
    [key3] => value3
)

我应该说的一点是,这对嵌套数组不起作用,因为你需要更高级的东西。