2010-05-02 2 views
2

이것은 매우 기본적인 것이어야하지만, 나는 약간 혼란 스럽다! 여기 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"; 

가, 가정 및 공공는 그 안에 데이터가없는, 그래서를 얻을 수 나는이 같은 $header(array)를 추가하는 경우

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

: foreach((array)$header as $headers), 그것은 더 이상 g 오류가 표시되지만 $header$headers (즉, 집 - 집, 집 대신 - 아무것도 아님).

기본적으로 데이터가 비어 있으면 아무 것도하지 않기를 원합니다.

+2

에코 html !!! – Galen

+0

이 글을 읽은 것으로 가정합니다 : http://php.net/manual/en/control-structures.foreach.php? foreach()를 호출하기 전에 입력을 테스트 해 보았습니까? –

+0

왜 HTML을 반향하지 않아야합니까? – Jared

답변

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"; 
+0

감사합니다. 지금 당장 원래 응답에 문제가 있음을 알았습니다. 질문 - 함수 (예 :'function menu()')에서 이것을 래핑 할 때 오류가 발생하는 이유는 무엇입니까? – Jared

+1

어떤 오류가 발생했는지 알지 못하면 말하기가 어렵습니다. 나는'menu()'함수 밖에서'$ menu = array (...); '를 가지고 있기 때문에 그것을 추측하고있다. 이 경우 함수의 첫 번째 줄에'global $ menu;'를 넣어서 PHP가 배열을 어디에서 찾을 수 있는지 알게하십시오. – icio

+0

네, 그게 .. 고마워요! – Jared

2

나는이 같은 내용 : 현재 메뉴 아래에 더 많은 옵션이 있는지 확인하기 위해 is_array를 사용

// 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"; 

.

+0

트릭 감사했습니다! – Jared

+1

배열 인 경우 – Reece45

+0

$ 헤더를 반향해서는 안됩니다. @ AlReece45는 그 사실을 알았습니다.) - 원래 배열을 약간 수정했습니다. 어쨌든 원래 배열은 icio의 솔루션보다 깨끗합니다. – gnarf