Обработка ошибок foreach () - как заставить его ничего не делать? - PullRequest
2 голосов
/ 03 мая 2010

Это должно быть очень просто, но я немного озадачен!

Вот мой массив:

$menu = array(
  'Home',

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

);

Вот моя логика:

* +1007 *

Как вы можете видеть, данные по домашним и общественным работам отсутствуют, поэтому я получаю

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

Если я добавлю (array) к $header следующим образом: foreach( (array)$header as $headers ), я больше не выдаю ошибку, а просто отображает $header как $headers (то есть Дом - Дом, а не Дом - ничего).

В принципе, если данные пусты, я хочу, чтобы они ничего не делали!

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

Вы должны проверить, является ли текущий элемент, который вы пытаетесь 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";
2 голосов
/ 03 мая 2010

Я вижу что-то вроде этого:

// 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 для определения, есть ли дополнительные опции под текущим меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...