这是我原始代码的示例,它似乎有用:
$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))
有关如何使这项工作的任何建议?谢谢!
答案 0 :(得分: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);
?>
至于为什么数组字符串中有返回,这是因为 eval
只接受语句,而不是表达式。
以上代码将为您提供所需内容:
Array
(
[Part1] => Array
(
[0] => Foo
[1] => 4
[2] => 2
[3] => Cat
)
[Part2] => Array
(
[0] => Bar
[1] => 3
[2] => 1
[3] => Dog
)
)
但是,这通常不是 。一点都没!这是非常不安全的(特别是在评估用户输入时 - 你应该避免在大多数情况下(如果不是所有情况下)进行操作)并且在某些情况下,它比它的价值更麻烦。
有关此问题的更多信息,请参阅:
答案 1 :(得分:0)
鉴于你的问题是基于假装的情况,很难确切地知道你在寻找什么,但我认为这样的事情应该能实现你所追求的目标:
$MainArry = array();
if (foo)
$MainArray['Part1'] = array(Foo, 4, 2, Cat);
if (bar)
$MainArray['Part2'] = array(Bar, 3, 1, Dog);
答案 2 :(得分:0)
听起来你试图反序列化一个数组。根据您的示例,您希望在字符串中构造PHP语法,然后再执行它。
如果您绝对必须这样做,请查看the eval PHP function
就个人而言,我不喜欢“eval”。
是否有机会使用JavaScript Object Notation?如果是这样,请将您的上述示例表达为:
$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 );