这是我的原始代码的一个例子,似乎工作:
$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 );