字符串“array”到实数组

时间:2010-11-24 11:47:49

标签: php arrays

现在我得到了一个数组的字符串,如下所示:

$str = "array('a'=>1, 'b'=>2)";

如何将此字符串转换为实数组?有没有“聪明的方法”来做到这一点,其他使用explode()?因为“字符串”数组在某些时候可能非常复杂。

谢谢!

7 个答案:

答案 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()

要将数组存储在字符串中,您应该查看serializeunserialize

答案 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 Answereval,我不太喜欢使用。

json_decode('array("option", "option2")')