【问题标题】:How to convert a string that contains an associative array to an associative array type?如何将包含关联数组的字符串转换为关联数组类型?
【发布时间】:2018-01-19 17:10:59
【问题描述】:

我有一个包含这样的关联数组的字符串

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

我想将它转换为关联数组,以便循环遍历它。

有什么办法吗?

提前致谢。

【问题讨论】:

  • 这么强的人从何而来?

标签: php arrays laravel-5


【解决方案1】:

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

$string = str_replace(["'", '=>', '[', ']'], ['"', ':', '{', '}'], $string);
print_r(json_decode($string, true));

demo

【讨论】:

  • 这个答案对我有用.. 谢谢你的时间:D
【解决方案2】:

你可以像这样使用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
)

我应该说,这不适用于嵌套数组,因为你需要一些更高级的东西。

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多