2013-11-22 32 views
-5

我有一个脚本,找到多维数组的所有可能的组合:注意:数组字符串转换错误

我得到这个错误:

<?php 
    $traits = array 
    (
     array('Happy', 'Sad', 'Angry', 'Hopeful'), 
     array('Outgoing', 'Introverted'), 
     array('Tall', 'Short', 'Medium'), 
     array('Handsome', 'Plain', 'Ugly') 
    ); 

    $i = 0; 
    if ($i >= count($traits)) 
     echo "<BR>\n"; 
    else 
    { 
     foreach ($traits[$i] as $trait) 
     { 
      foreach($traits as $item) 
      { 
       echo '<BR>'.$trait, $item, $i + 1; 
      } 
     } 
    } 
?> 

在哪里我会错呢?

这是原代码:

<?php 
    function showCombinations($string, $traits, $i) 
    { 
     if ($i >= count($traits)) 
      echo trim($string) . "\n"; 
     else 
     { 
      foreach ($traits[$i] as $trait) 
       showCombinations("$string $trait", $traits, $i + 1); 
     } 
    } 

    $traits = array 
    (
     array('Happy', 'Sad', 'Angry', 'Hopeful'), 
     array('Outgoing', 'Introverted'), 
     array('Tall', 'Short', 'Medium'), 
     array('Handsome', 'Plain', 'Ugly') 
    ); 

    showCombinations('', $traits, 0); 
?> 

所以我删除的功能,因为我不想使用的功能。从第1码

预期输出:

Happy Outgoing Tall Handsome 
Happy Outgoing Tall Plain 
Happy Outgoing Tall Ugly 
Happy Outgoing Short Handsome 
Happy Outgoing Short Plain 
Happy Outgoing Short Ugly 
Happy Outgoing Medium Handsome 
Happy Outgoing Medium Plain 
Happy Outgoing Medium Ugly 
Happy Introverted Tall Handsome 
Happy Introverted Tall Plain 
Happy Introverted Tall Ugly 
Happy Introverted Short Handsome 
Happy Introverted Short Plain 
Happy Introverted Short Ugly 
Happy Introverted Medium Handsome 
Happy Introverted Medium Plain 
Happy Introverted Medium Ugly 
Sad Outgoing Tall Handsome 
Sad Outgoing Tall Plain 
Sad Outgoing Tall Ugly 
Sad Outgoing Short Handsome 
Sad Outgoing Short Plain 
Sad Outgoing Short Ugly 
Sad Outgoing Medium Handsome 
Sad Outgoing Medium Plain 
Sad Outgoing Medium Ugly 
Sad Introverted Tall Handsome 
Sad Introverted Tall Plain 
Sad Introverted Tall Ugly 
Sad Introverted Short Handsome 
Sad Introverted Short Plain 
Sad Introverted Short Ugly 
Sad Introverted Medium Handsome 
Sad Introverted Medium Plain 
Sad Introverted Medium Ugly 
Angry Outgoing Tall Handsome 
Angry Outgoing Tall Plain 
Angry Outgoing Tall Ugly 
Angry Outgoing Short Handsome 
Angry Outgoing Short Plain 
Angry Outgoing Short Ugly 
Angry Outgoing Medium Handsome 
Angry Outgoing Medium Plain 
Angry Outgoing Medium Ugly 
Angry Introverted Tall Handsome 
Angry Introverted Tall Plain 
Angry Introverted Tall Ugly 
Angry Introverted Short Handsome 
Angry Introverted Short Plain 
Angry Introverted Short Ugly 
Angry Introverted Medium Handsome 
Angry Introverted Medium Plain 
Angry Introverted Medium Ugly 
Hopeful Outgoing Tall Handsome 
Hopeful Outgoing Tall Plain 
Hopeful Outgoing Tall Ugly 
Hopeful Outgoing Short Handsome 
Hopeful Outgoing Short Plain 
Hopeful Outgoing Short Ugly 
Hopeful Outgoing Medium Handsome 
Hopeful Outgoing Medium Plain 
Hopeful Outgoing Medium Ugly 
Hopeful Introverted Tall Handsome 
Hopeful Introverted Tall Plain 
Hopeful Introverted Tall Ugly 
Hopeful Introverted Short Handsome 
Hopeful Introverted Short Plain 
Hopeful Introverted Short Ugly 
Hopeful Introverted Medium Handsome 
Hopeful Introverted Medium Plain 
Hopeful Introverted Medium Ugly 
+2

如果你陈述你想要完成的事情,你可能会得到更好的答案。 –

+0

Upvoted问题并投票重新编辑后重新打开。 – andyb

回答

1

首先,你需要改变:

foreach ($traits[$i] as $trait) 

要:

foreach ($traits as $trait) 

然后意识到$trait仍然是一个数组。因此,而不是

echo '<BR>'.$trait, $test, $i + 1; 

你要还是遍历数组:

foreach($trait AS $value) 

现在你可以重复你的$value

foreach ($traits as $trait) { 
    foreach($trait AS $value) { 
     echo $value; 
    } 
} 

更新:下面的评论之间和几个问题的更新,它变得清楚什么期望的输出实际上。最终的解决方案在这里:http://3v4l.org/X3i3p

+1

他为什么要这样? '$ traits'是一个二维数组,但'$ traits'不是。所以改变它仍然会返回以前的错误。 –

+0

@Darline你的代码中仍然有'echo'
'。$ trait'。 '$ trait'是一个数组,你不能只是回应它。 – jszobody

+0

@Darline看看我最后的'foreach'循环。这会让你回应每一个单独的价值。你还需要做什么? – jszobody

相关问题