现在我有一个数组的字符串,像这样:
$str = "array('a'=>1, 'b'=>2)";
我怎么将这个字符串转换为真正的数组?除了使用explode()函数之外,是否有其他更"聪明"的方法?因为这个"字符串"数组有时可能非常复杂。
谢谢!
eval("\$myarray = $str;");
eval()
,应该尽量避免)。但是:你从哪里获取字符串?它是你可以影响的吗?如果是这样,使用serialize()
/ unserialize()
将会是更好的方法。当使用一个简短的数组时,json_decode
可以正常工作。
json_decode('["option", "option2"]')
但是,与像 OP 提出的旧版本不同,它不支持。唯一可行的方法是使用Akash 的答案或 eval
,但我并不喜欢使用它们。
json_decode('array("option", "option2")')
在任何情况下都不要使用eval()
,而是使用strtoarray($str, 'keys')
用于带有键的数组,strtoarray($str)
用于没有键的数组。
function strtoarray($a, $t = ''){
$arr = [];
$a = ltrim($a, '[');
$a = ltrim($a, 'array(');
$a = rtrim($a, ']');
$a = rtrim($a, ')');
$tmpArr = explode(",", $a);
foreach ($tmpArr as $v) {
if($t == 'keys'){
$tmp = explode("=>", $v);
$k = $tmp[0]; $nv = $tmp[1];
$k = trim(trim($k), "'");
$k = trim(trim($k), '"');
$nv = trim(trim($nv), "'");
$nv = trim(trim($nv), '"');
$arr[$k] = $nv;
} else {
$v = trim(trim($v), "'");
$v = trim(trim($v), '"');
$arr[] = $v;
}
}
return $arr;
}