PHP Breadcrumb函数使用foreach循环和数组

时间:2015-10-25 20:06:33

标签: php arrays foreach

我正在尝试编写一个PHP Breadcrumb函数,该函数使用PHP的$ _SERVER [“REQUEST_URI”]函数来访问包含URI的数组。

我目前很难编写函数来循环遍历数组以构建最终产品,这就是它自己的正面格式。

因此,如果我们对函数进行以下调用:

createBreadcrumb( “manage_account.php”);

这是函数以及URI作为参数,这是函数应该用来构建面包屑的。

因此,如果参数是manage_account.php,则应访问第一个数组,即$ breadcrumbArray [0] [1] [0];,后续的$ breadcrumbArray [0] [1] [1]与$ 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>';
      }
    }
  }

}

上述错误是由于未正确访问数组引起的,

这是$ this-&gt; $ breadcrumbArray

应该是$ this-&gt; 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

2 个答案:

答案 0 :(得分: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>';
}

编辑:你自己解决了问题:Y ... 这个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)

会更好

答案 1 :(得分:0)

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

您需要将其更改为 $this->breadcrumbArray[0][$i][0]

并在使用之前定义$url

此外,您还要检查$myarray->breadcrumbArray[0][$i][0])是否存在,并在不存在时跳出循环。