2014-02-19 12 views
0

有人可以告訴我爲什麼這不起作用嗎?PHP嵌套數組來管理導航功能將不起作用

「isTrue」=> true實際上是一個函數,它確定該字段的內容是否存在,我var_dumped它,它的工作原理。

我試圖輸出一個(或全部,取決於「IsTrue運算」 =>真)的導航鏈接,因爲這:

<li><a class="gallery-tab" href="#gallery-tab">gallery</a></li> 

作爲內容類型特定導航元素。我之前以一種更爲粗糙的方式工作,但我試圖讓代碼更易於維護,這對我來說是一個令人沮喪的障礙。

當我運行下面的代碼,我得到NULL

雖然我用PHP很舒服,我不是它的一個經驗豐富的獸醫。通常,當我向你們展示這樣的問題時,有人會很快看到問題,並且我剛剛撞到牆上試圖弄清楚。

這裏是有問題的代碼:

<?php 

$navArray[0] = array(
    "title" => "statement", 
    "class" => "statement-tab", 
    "isTrue" => true 
); 
$navArray[1] = array(
    "title" => "gallery", 
    "class" => "gallery-tab", 
    "isTrue" => true 
); 
$navArray[2] = array(
    "title" => "video", 
    "class" => "video-tab", 
    "isTrue" => true 
); 
$navArray[3] = array(
    "title" => "poetry", 
    "class" => "poetry-tab", 
    "isTrue" => true 
); 

function get_nav() { 
    foreach ($navArray as $array) { 
     if ($array["isTrue"] == true) { 

      $output = ""; 
      $output = $output . "<li>"; 
      $output = $output . '<a class="' . $array["class"] . '" href="#' . $array["class"] . '" />'; 
      $output = $output . $array["title"]; 
      $output = $output . "</a>"; 
      $output = $output . "</li>"; 

      return $output; 

     } 
    } 
} 

$getNav = get_nav(); 

?> 

<pre><?php var_dump($getNav); ?></pre> 

如果有不清楚的地方,請讓我知道,我會盡我所能來澄清。

編輯: zeantsoi好心的指出,我在調用錯誤的數組。我修復並測試了它,但仍然沒有運氣。

回答

0

我可以看到一些問題。首先,$nav_array不存在。即使假設它應該是$navArray,它仍然不存在於該函數的範圍內。我建議是這樣的:

function get_nav($navArray) { 
    foreach($navArray as $array) { 
... 
$getNav = get_nav($navArray); 

的第二個問題是,你永遠只能會得到第一導航項目,因爲你編譯並返回循環內的輸出。所以,你需要更新它是這樣的:

function get_nav($navArray) { 
    $output = ""; 
    foreach($navArray as $array) { 
     if ($array["isTrue"] == true) { 
      $output .= "<li>"; 
      $output .= '<a class="' . $array["class"] . '" href="#' . $array["class"] . '" />'; 
      $output .= $array["title"]; 
      $output .= "</a>"; 
      $output .= "</li>"; 
     } 
    } 
    return $output; 
} 
+0

這個工程!非常感謝!我會研究你的答案,直到我再也不犯這個錯誤。你豐富了我的生活。 – atotalpirate

0

有三件事情你必須在你的代碼更改:

1 - 呼籲$navArray,而不是$nav_array

2 - $output = "";必須恰好在foreach循環之前。

3 - return $output;必須在您的get_nav()函數的末尾,如果您打算獲得整個$navArray的輸出結果。

+0

試過這個,我越來越'串(0)「」'現在。 – atotalpirate

+0

嘗試在所有之前聲明'$ navArray = array();'。 –

+0

感謝您花時間回顧我的問題!馬克帕內爾讓我分類。 – atotalpirate