Php 将字符串放入数组中

Php 将字符串放入数组中,php,Php,我有一个字符串,其中包含以下内容: 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); 但当然,正如预期的那样,这只会给你一个数组,其中有一个字符串类型的项,以及整个sheban

我有一个字符串,其中包含以下内容:

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);
但当然,正如预期的那样,这只会给你一个数组,其中有一个字符串类型的项,以及整个shebang

有什么提示吗?

您可以使用,但除非您确定字符串的内容(可能会导致安全问题),否则不建议使用该提示

编辑:


似乎您的数组不在php数组的语法中,您需要重新格式化它。

在我谈到使用
eval()
之前

正如Yazmat所提到的,如果您非常确定没有人可以将代码注入到这个函数中,您可以使用正则表达式
([a-zA-Z0-9]+)\s*=\s*=\s*
替换为
“$1”=>
,将代码更改为与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
        )
    */
?>

什么是
$strVar
?最初的文字?@GrantThomas从OP开始,我假设字符串
数组(a=1,b=2,c=array(ca=23,cb=45),d=array(da=342,db=array(dba=3154,dbb=8746,dc=765),e=8)
。是的,$strVar是包含“arraysting”的变量,这个字符串有多“安全”?如果它相当安全,您可以在经过一些修改后对其进行
eval()
修改。@Borniet这个字符串来自哪里?它是您自己放入数据库/文件的东西,您是否可以使用或保存数据,然后使用并取回数组?看起来并不是有效的数组语法需要评估。我要说的是,用
=>
替换
=
,但是eval+任意替换,甚至不检查
=
是否是字符串的一部分,这有点过分了。哦,它也没有键的引用,没关系。即使用
=>
替换
=
,用
“string\u key”
替换字符串键,也不能成功地
eval()
此数组。想法?这一个就成功了!如上所述,该工具将在内部使用,甚至可能仅由我使用。因此输入是安全的。