现在我得到了一个数组的字符串,如下所示:
$str = "array('a'=>1, 'b'=>2)";
如何将此字符串转换为实数组?有没有“聪明的方法”来做到这一点,其他使用explode()?因为“字符串”数组在某些时候可能非常复杂。
谢谢!
答案 0 :(得分:8)
使用php" eval"功能
eval("\$myarray = $str;");
答案 1 :(得分:6)
我不知道这样做的好办法(只有邪恶的eval()
realy should be avoided)。
但是:你从哪里得到那个字符串?这是你可以影响的事情吗?如果是这样,使用serialize()
/ unserialize()
会更好。
答案 2 :(得分:1)
您必须使用eval()
。
获取不需要eval()
解码的数组的文本表示的更好方法是使用json_encode()
/ json_decode()
。
答案 3 :(得分:1)
您可以将字符串写入文件,将字符串包含在文件中的函数定义中,并为文件提供.php扩展名。
然后在当前模块中包含php文件并调用将返回数组的函数。
答案 4 :(得分:0)
如果您可以信任该字符串,请使用eval。我不记得确切的语法,但这应该有效。
$arr = eval($array_string);
如果字符串是由用户输入或其他不受信任的来源提供的,那么在所有情况下都应该避免使用eval()!
要将数组存储在字符串中,您应该查看serialize和unserialize。
答案 5 :(得分:0)
在任何情况下都不要使用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;
}
答案 6 :(得分:0)
使用数组json_decode
的简短版本
json_decode('["option", "option2"]')
但是对于旧版本,就像OP要求的那样。唯一可以做的就是使用Akash's Answer或eval
,我不太喜欢使用。
json_decode('array("option", "option2")')