2013-03-11 30 views
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)) 

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

回答

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 
     ) 

) 

然而,这一般不建议。根本!这是非常不安全的,(尤其是在评估用户输入时 - 如果不是所有情况,你都应该避免这么做),并且在某些情况下,它比它的价值更麻烦。

更多关于这件事情,请参阅本:

When is eval evil in php?

+0

这很好。感谢“邪恶eval”的额外信息。我的所有投入都是由我决定的,所以我认为我在那里可以,但我会考虑花更多的时间从不同的方向走。谢谢! – Rob 2013-03-11 04:39:09

+0

不客气! – jrd1 2013-03-11 04:42:18

0

鉴于你的问题是基于一个假装的情况下,很难知道你在寻找什么,但我觉得这样的事情应该达到你以后:

$MainArry = array(); 
if (foo) 
    $MainArray['Part1'] = array(Foo, 4, 2, Cat); 
if (bar) 
    $MainArray['Part2'] = array(Bar, 3, 1, Dog); 
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); 
+0

感谢您的这种替代方案 - 我会进一步检查。 – Rob 2013-03-11 14:20:16

+0

让我知道你的决定。我也有兴趣了解更多关于你在做什么以及你如何达到分段代码生成的需求。 – 2013-03-11 14:29:31