1

这是我的原始代码的一个示例,它似乎有效:

$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))

关于如何使这项工作的任何建议?谢谢!

4

3 回答 3

1

这样做(如您所愿)的唯一方法是使用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);

?>

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

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

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

    [Part2] => Array
        (
            [0] => Bar
            [1] => 3
            [2] => 1
            [3] => Dog
        )

)

但是,通常不建议这样做。一点都不!这是非常不安全的,(尤其是在评估用户输入时——在大多数情况下,如果不是所有情况下,你都应该避免这样做),并且在某些情况下,它的麻烦多于它的价值。

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

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

于 2013-03-11T03:54:50.343 回答
0

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

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

就个人而言,我不喜欢“评估”。

有机会使用 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 );
于 2013-03-11T04:02:43.107 回答
0

鉴于您的问题是基于假装的情况,很难确切知道您在寻找什么,但我认为这样的事情应该可以实现您所追求的:

$MainArry = array();
if (foo)
    $MainArray['Part1'] = array(Foo, 4, 2, Cat);
if (bar)
    $MainArray['Part2'] = array(Bar, 3, 1, Dog);
于 2013-03-11T03:36:54.007 回答