foreach()错误处理 - 如何使它什么都不做?

时间:2010-05-02 22:27:46

标签: php error-handling foreach

这应该是非常基本的,但我有点难过!

这是我的阵列:

$menu = array(
  'Home',

  'Stuff'=>array(
    'Losta Stuff',
    'Less Stuff',
    'Ur moms stuff',
    'FAQ'
 ),
  'Public Works'

);

这是我的逻辑:

echo "<ol>\n";
foreach( (array)$menu as $header )
{
  echo '  <li><b>'.$header."</b><br />\n";
 echo '  <ol>';
  foreach( (array)$header as $headers )
  {
    echo '    <li>'.$headers.".</li>\n";
  }
  echo '  </ol>';
}
echo "</ol>\n";

正如您所看到的,家庭和公共工程中没有数据,所以我得到了一个

Warning: Invalid argument supplied for foreach() in test.php on line ##

如果我将(array)添加到这样的$headerforeach( (array)$header as $headers ),它不再向我提供错误,但它只会将$header显示为$headers (即家庭 - 家庭,而不是家庭 - 没有)。

基本上,如果数据是空的,我希望它什么都不做!

2 个答案:

答案 0 :(得分:2)

我看到这样的事情:

// your old menu was using keys for headers on "submenus" only
// this one uses keys for headers for everything
$menu = array(
  'Home'=>'Home',   
  'Stuff'=>array(
    'Losta Stuff',
    'Less Stuff',
    'Ur moms stuff',
    'FAQ'
  ),
  'Public Works' => 'Public Works',    
);
echo "<ol>\n";
foreach( (array)$menu as $header => $items )
{
  echo '  <li><b>'.$header."</b>";
  if (is_array($items)) {
    echo "<br />\n";
    echo '  <ol>';
    foreach( $items as $subhead )
    {
      echo '    <li>'.$subhead.".</li>\n";
    }
    echo '  </ol>';
  }
}
echo "</ol>\n";

使用is_array确定当前菜单下是否有更多选项。

答案 1 :(得分:2)

您应该测试您尝试echo的当前项目是否为数组,可以使用is_array完成,然后采取相应措施。像下面这样的东西可能会成功。

<?php 

$menu = array(
    'Home',
    'Stuff'=>array(
        'Losta Stuff',
        'Less Stuff',
        'Ur moms stuff',
        'FAQ'
    ),
    'Public Works'
);

echo "<ol>\n";
foreach($menu as $menuName => $header )
{
    if (!is_array($header))
    {
        echo '  <li><b>'.$header."</b><br />\n";
    }
    else
    {
        echo "<li><b>$menuName</b><ol>";
        foreach($header as $headers )
        {
            echo '    <li>'.$headers.".</li>\n";
        }
        echo "</ol></li>";
    }
}
echo "</ol>\n";