2

我有一个包含以下内容的字符串:

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。

有小费吗?

4

2 回答 2

0

您可以使用eval()但不推荐使用,除非您确定包含字符串的内容(这可能会导致安全问题)

编辑 :

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

于 2013-04-11T10:22:41.357 回答
0

在我说任何关于使用的内容之前eval()请阅读这篇 stackoverflow 帖子

正如 Yazmat 所提到的,eval()如果您非常确定没有人可以将代码注入其中,则可以使用,并使用([a-zA-Z0-9]+)\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
        )
    */
?>

演示

当前限制:

  • 仅当您在数组中的值都是数字时,它才会起作用 - 否则您需要更改正则表达式。
于 2013-04-11T10:39:46.763 回答