2015-10-25 63 views
1

我正在嘗試編寫一個PHP Breadcrumb函數,該函數使用PHP的$ _SERVER [「REQUEST_URI」]函數來訪問包含該URI的數組。使用foreach循環和數組的PHP Breadcrumb函數

我目前正在努力編寫函數來循環數組來構建最終產品,即正確格式化它的自我麪包。

所以,如果我們有如下調用函數:

createBreadcrumb( 「manage_account.php」);

這是函數以及作爲參數的URI,函數應該用來構建麪包屑。

因此,如果參數是manage_account.php,應該訪問第一個數組,即$ breadcrumbArray [0] [1] [0];;後續的$ breadcrumbArray [0] [1] [1]與to $ breadcrumbArray [1] [1];這是URI的人類可讀版本。 $ breadcrumbArray [2] [1]是人類可讀版本的路徑。

我的陣列如下:

$this->breadcrumbArray[0] = array(
    array("index.php", 1), 
    array("manage_account.php", 1, 2), 
    array("manage_users.php", 1, 3), 
    array("view_users.php", 1, 4), 
    array("new_user.php", 1, 5), 
    array("edit_user.php", 1, 6), 
    array("view_user.php", 1, 7), 
    array("new_module.php", 1, 8), 
    array("edit_module.php", 1, 9), 
    array("view_module.php", 1, 10), 
    array("new_handbook.php", 1, 11), 
    array("edit_handbook.php", 1, 12), 
    array("view_handbook", 1, 13) 
); 

$this->breadcrumbArray[1] = array(
    "1" => "Home", 
    "2" => "Manage Account", 
    "3" => "Manage Users", 
    "4" => "View Users", 
    "5" => "New Users", 
    "6" => "Edit Users", 
    "7" => "View User", 
    "8" => "New Module", 
    "9" => "Edit Module", 
    "10" => "View Module", 
    "11" => "New Handbook", 
    "12" => "Edit Handbook", 
    "13" => "View Handbook" 
); 

$this->breadcrumbArray[2] = array(
    "1" => "index.php", 
    "2" => "manage_account.php", 
    "3" => "manage_users.php", 
    "4" => "view_users.php", 
    "5" => "new_user.php", 
    "6" => "edit_user.php", 
    "7" => "view_user.php", 
    "8" => "new_module.php", 
    "9" => "edit_module.php", 
    "10" => "view_module.php", 
    "11" => "new_handbook.php", 
    "12" => "edit_handbook.php", 
    "13" => "view_handbook.php" 
); 

更新

我寫了下面的代碼,但我得到的是我不明白的錯誤。

錯誤:

PHP Notice: Undefined variable: breadcrumbArray in *** on line 90 
PHP Fatal error: Cannot access empty property in *** on line 90 

代碼:

public function createBreadcrumb($url) { 
    echo $this->breadcrumbArray[0][0][0]; 

    $retval; 

    for($i = 0; $i < 100; $i++) { 
    echo $this->breadcrumbArray[0][0][0]; 
    if($this->$breadcrumbArray[0][$i][0] = $url) { 
     echo $this->$breadcrumbArray[0][$i][0].'<br/>'; 
     for($x = 1; $x < 100; $x++) { 

     echo '<a href="'.$this->$breadcrumbArray[2][$x].'">'.$this->$breadcrumbArray[1][$i].'</a>'; 
     } 
    } 
    } 

} 

上述錯誤是由不正確地訪問陣列引起的,

它是$這 - > $ breadcrumbArray

它應該是$ this-> breadcrumbArray


更新2(工作守則)

public function createBreadcrumb($url) { 

    for($i = 0; $i < (count($this->breadcrumbArray[0]) - 1); $i++) { 
    if($this->breadcrumbArray[0][$i][0] == $url) { 
     for($x = 1; $x < count($this->breadcrumbArray[0][$i]); $x++) { 
     if((count($this->breadcrumbArray[0][$i]) - 1) == $x) { 
      echo $this->breadcrumbArray[1][$this->breadcrumbArray[0][$i][$x]]; 
     } else { 
      echo '<a href="'.$this->breadcrumbArray[2][$this->breadcrumbArray[0][$i][$x]].'">'.$this->breadcrumbArray[1][$this->breadcrumbArray[0][$i][$x]].'</a> > '; 
     } 
     } 
    } 
    } 

} 

上面的代碼是遠離我曾經寫過的最優雅的事情,但它確實給一個更好的主意,因爲我試圖實現,因爲它確實起作用。任何進一步的建議當然還是非常受歡迎的。

任何幫助非常感謝,謝謝! :D

+0

我在這裏沒有看到任何問題,僅僅是您正在構建的內容的聲明。你有什麼需要幫助的? – Ray

+0

對不起,剛剛意識到我自己正在閱讀它,我已經更新了原來的問題。謝謝雷。 –

+0

我建議你用你試圖構建的函數添加代碼,有人可以幫助你,如果他們看到它的問題。 '爲我請求編寫代碼'通常會被忽視。 – Ray

回答

0

你的問題完全不清楚。正如我猜你試圖做到這一點 -

foreach($this->breadcumbArray[0] as $val){ 

    $val[2]= isset($val[2])? $val[2] : $val[1] ; 
    $output[] = '<a href="'.$val[0].'">'.$this->breadcumbArray[$val[1]][$val[2]].'</a>'; 
} 

編輯:你已經解決了你的問題自己:是... 這for($i = 0; $i < (count($this->breadcrumbArray[0]) - 1); $i++)應該for($i = 0; $i < count($this->breadcrumbArray[0]); $i++),它會更好,如果寫if(isset($this->breadcrumbArray[0][$i][0]) && $this->breadcrumbArray[0][$i][0] == $url)

+0

這就是我正在嘗試做的事情,我已經有些改寫了這個問題,我正在努力解釋它,如果它還不清楚,請告訴我,我會繼續嘗試將我的想法寫在紙上,謝謝你爲你的幫助Atiqur。 –

0

更新: 更重要的是: $this->$breadcrumbArray[0][$i][0]

您需要更改到 $this->breadcrumbArray[0][$i][0]

,並使用它之前,定義$url

此外,您將要檢查$myarray->breadcrumbArray[0][$i][0])是否存在,如果不存在則跳出循環。