【发布时间】:2018-01-19 17:10:59
【问题描述】:
我有一个包含这样的关联数组的字符串
$string = "['key1'=>'value1','key2'=>'value2','key3'=>'value3']";
我想将它转换为关联数组,以便循环遍历它。
有什么办法吗?
提前致谢。
【问题讨论】:
-
这么强的人从何而来?
我有一个包含这样的关联数组的字符串
$string = "['key1'=>'value1','key2'=>'value2','key3'=>'value3']";
我想将它转换为关联数组,以便循环遍历它。
有什么办法吗?
提前致谢。
【问题讨论】:
非常简单的方法是将字符串转换为 json 并解码
$string = str_replace(["'", '=>', '[', ']'], ['"', ':', '{', '}'], $string);
print_r(json_decode($string, true));
【讨论】:
你可以像这样使用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
)
)
请注意,[-\w]+ 匹配 a-z、A-Z、0-9、- 和 _,因此这应该是键和值的格式。您当然可以根据需要调整 Regx。
现在,如果您想将它们置于更可用的格式中,您可以添加以下内容:
$output = array_combine($matches['key'],$matches['value']);
输出
Array
(
[key1] => value1
[key2] => value2
[key3] => value3
)
我应该说,这不适用于嵌套数组,因为你需要一些更高级的东西。
【讨论】: