用一个由附加字符串组成的变量构建一个多维数组



这是我的原始代码的一个例子,似乎工作:

$MainArray =  array('Part1'=>array(Foo, 4, 2, Cat), 'Part2'=>array(Bar, 3, 1, Dog));
print_r ($MainArray);

的回报:

Array ( [Part1] => Array ( [0] => Foo [1] => 4 [2] => 2 [3] => Cat ) [Part2] => Array ( [0] => Bar [1] => 3 [2] => 1 [3] => Dog ) ) 

我想做的是这样的事情(这些片段是基于if语句包含的):

$ArrayPieces.="'Part1'=>array(Foo, 4, 2, Cat), ";
$ArrayPieces.="'Part2'=>array(Bar, 3, 1, Dog)";
$MainArray =  array($ArrayPieces);
print_r ($MainArray);

但是返回:

Array ( [0] => 'Part1'=>array(Foo, 4, 2, Cat), 'Part2'=>array(Bar, 3, 1, Dog))

有什么建议吗?谢谢!

唯一的方法(如您所愿)是使用eval():

<?php
$MainArray =  array('Part1'=>array('Foo', 4, 2, 'Cat'), 'Part2'=>array('Ba$
print_r ($MainArray);
$ArrayPieces = "return array(";
$ArrayPieces .= "'Part1'=>array('Foo', 4, 2, 'Cat'), ";
$ArrayPieces .= "'Part2'=>array('Bar', 3, 1, 'Dog')";
$ArrayPieces .= ");";
$MainArray =  eval($ArrayPieces);
print_r ($MainArray);
?>

至于为什么在数组字符串中有返回,这是因为 eval只接受语句,不接受表达式。

上面的代码会给你你想要的:

Array
(
    [Part1] => Array
        (
            [0] => Foo
            [1] => 4
            [2] => 2
            [3] => Cat
        )
    [Part2] => Array
        (
            [0] => Bar
            [1] => 3
            [2] => 1
            [3] => Dog
        )
)

但是,一般不推荐使用。在所有!这是非常不安全的,(特别是在评估用户输入时——在大多数情况下,如果不是所有情况,你都应该避免这样做),在某些情况下,它带来的麻烦比它的价值更多。

有关此问题的更多信息,请参阅:

在php中什么时候eval是邪恶的?

考虑到你的问题是基于一个假装的情况,很难确切地知道你在寻找什么,但我认为这样的东西应该达到你所追求的:

$MainArry = array();
if (foo)
    $MainArray['Part1'] = array(Foo, 4, 2, Cat);
if (bar)
    $MainArray['Part2'] = array(Bar, 3, 1, Dog);

这听起来像是你试图反序列化一个数组。根据您的示例,您希望在字符串中构造PHP语法,然后稍后执行它。

如果这是你绝对必须做的,请查看eval PHP函数

我个人不喜欢eval。

是否有机会使用JavaScript对象表示法?如果是,将上面的例子表达为:

$json_pieces = '{';
$json_pieces .= '"Part1": ["Foo", 4, 2, "Cat"],';
$json_pieces .= '"Part2": ["Bar", 3, 1, "Dog"]';
$json_pieces .= '}'
$MainArray = json_decode( $json_pieces, TRUE );
print_r( $main_array );

相关内容

  • 没有找到相关文章