我有一个包含此字符串的字符串:
array(a=1, b=2, c=array(ca=23, cb=45),d=array(da=342, db=array(dba=3154, dbb=8746), dc=765),e=8)
现在,我需要根据此字符串的内容创建一个数组。我这样试过:
$arrValues = array();
$arrValues = $strVar;
var_dump($arrValues);
但是,当然,正如预期的那样,这只会给你一个包含1个字符串类型的数组,以及整个shebang。
任何提示?
答案 0 :(得分:0)
答案 1 :(得分:0)
在我说到使用eval()
,read this stackoverflow post。
正如Yazmat所提到的,如果您确定没有人可以为此注入代码,并使用([a-zA-Z0-9]+)\s*=\s*
替换为"$1" =>
的正则代码来更改代码,则可以使用eval()
符合PHP数组:
<?php
$strVar = 'array(a=1, b=2, c=array(ca=23, cb=45),d=array(da=342, db=array(dba=3154, dbb=8746), dc=765),e=8)';
$arrValues = array();
$phpCompliantStrVar = preg_replace('/([a-zA-Z0-9]+)\s*=\s*/', '"$1" => ', $strVar) . ';';
//string(157) "array("a" => 1, "b" => 2, "c" => array("ca" => 23, "cb" => 45),"d" => array("da" => 342, "db" => array("dba" => 3154, "dbb" => 8746), "dc" => 765),"e" => 8);"
//Beware of the evilness that eval can cause! It will suck out your soul if overdone.
eval('$arrValues = ' . $phpCompliantStrVar);
print_r($arrValues);
/*
Array
(
[a] => 1
[b] => 2
[c] => Array
(
[ca] => 23
[cb] => 45
)
[d] => Array
(
[da] => 342
[db] => Array
(
[dba] => 3154
[dbb] => 8746
)
[dc] => 765
)
[e] => 8
)
*/
?>
目前的限制: