为什么我的PHP函数不产生任何输出?

为什么我的PHP函数不产生任何输出?,php,arrays,function,multidimensional-array,echo,Php,Arrays,Function,Multidimensional Array,Echo,下面的代码显示了一个多维数组,以及一个函数,该函数在数组中循环以回显带有链接的嵌套菜单 但是,该函数似乎不起作用,因为没有任何响应 这是工作,但我已经改变了一些包括周围,所以它可能是与此有关 <?php $urls = array ( 0=>array ( 0=>"Home", 1=>"http://uni.michaelnorris.co.uk/", 2=>"Home", 3=>"",

下面的代码显示了一个多维数组,以及一个函数,该函数在数组中循环以回显带有链接的嵌套菜单

但是,该函数似乎不起作用,因为没有任何响应

这是工作,但我已经改变了一些包括周围,所以它可能是与此有关

<?php

$urls = array (
    0=>array (
        0=>"Home",
        1=>"http://uni.michaelnorris.co.uk/",
        2=>"Home",
        3=>"",
        4=>"",
        5=>"1"
    ),

    1=>array (
        0=>"Blog",
        1=>"http://uni.michaelnorris.co.uk/blog/",
        2=>"Blog",
        3=>"",
        4=>"",
        5=>"1"
    ),

    2=>array (
        0=>"Glossary",
        1=>"http://uni.michaelnorris.co.uk/",
        2=>"Glossary",
        3=>"",
        4=>"",
        5=>"1"
    ),

    3=>array (
        0=>"Resources",
        1=>"http://uni.michaelnorris.co.uk/blog/",
        2=>"Resources",
        3=>"",
        4=>"",
        5=>"1"
    ),

    4=>array (
        0=>"Staff",
        1=>"http://uni.michaelnorris.co.uk/",
        2=>"Staff",
        3=>"",
        4=>"",
        5=>"1"
    ),

    5=>array (
        0=>"Blog",
        1=>"http://uni.michaelnorris.co.uk/blog/",
        2=>"Blog",
        3=>"",
        4=>"",
        5=>"1"
    ),

    6=>array (
        0=>"Home",
        1=>"http://uni.michaelnorris.co.uk/",
        2=>"Home",
        3=>"",
        4=>"",
        5=>"1"
    ),

    7=>array (
        0=>"Blog",
        1=>"http://uni.michaelnorris.co.uk/blog/",
        2=>"Blog",
        3=>"",
        4=>"",
        5=>"1"
    )       
);

function showMenu()
{
    $top = count($urls);
    echo "<ul>";
    for ($i=0;$i<$top;$i++) {
        echo "<li><a href='".$urls[$i][1]."' title='".$urls[$i][2]."'>".$urls[$i][0]."</a><li>";
    }
    echo "</ul>";
}

?>

<?php showMenu(); ?>

您试图从函数内部访问
$url
变量,这是不可能的。必须将数组传递到函数中,或让函数知道它是全局变量。以下是代码的修改版本,可以正常工作:

function showMenu($urls)
{
    $top = count($urls);
    echo "<ul>";
    for ($i=0;$i<$top;$i++) {
        echo "<li><a href='".$urls[$i][1]."' title='".$urls[$i][2]."'>".$urls[$i][0]."</a></li>";
    }
    echo "</ul>";
}

?>

<?php showMenu($urls); ?>
函数显示菜单($URL)
{
$top=count($url);
回声“
    ”; 对于($i=0;$i)

我还修复了关闭时丢失的
/
  • 在后退一步后,我注意到了您的问题。用以下内容替换
    showMenu

    function showMenu()
    {
        global $urls;
        $top = count($urls);
        echo "<ul>";
        for ($i=0;$i<$top;$i++) {
            echo "<li><a href='".$urls[$i][1]."' title='".$urls[$i][2]."'>".$urls[$i][0]."</a></li>";
        }
        echo "</ul>";
    }
    
    功能显示菜单()
    {
    全球$URL;
    $top=count($url);
    回声“
      ”;
      对于($i=0;$i您还缺少结束列表元素上的斜杠:

      echo "<li><a href='".$urls[$i][1]."' title='".$urls[$i][2]."'>".$urls[$i][0]."</a><li>";
      
      echo“
    • ”;
    • 应该是:

      echo "<li><a href='".$urls[$i][1]."' title='".$urls[$i][2]."'>".$urls[$i][0]."</a></li>";
      
      echo“
    • ”;
      您在函数外声明数组,因此它在函数内没有任何作用域。要么将数组声明为全局数组,要么将数组传递给函数。我更喜欢后者。

      URL在函数showMenu的作用域外定义,因此它不知道该函数存在。您可以使用全局方法要将其引入:

      function showMenu() {
        global $urls;
        [...]
      }
      
      也可以将其作为变量传递:

      $urls = array();
      
      function showMenu($urls) {
        [...]
      }
      
      showMenu($urls);
      
      或者您可以在函数本身中定义$URL

      此外,您可能有兴趣知道不必显式地对数组进行编号。您可以更轻松地将其键入:

      $urls = array(
        array()
        ,array()
        ,array()
      );
      
      你忘了放

      global $urls;
      
      在showMenu功能的顶部

      function showMenu()
      { 
          global $urls;
          $top = count($urls);
          ...
      

      你收到错误了吗?输出不正确吗?我的水晶球目前正在修复。我看不出你的代码有任何固有的错误。哇……那不应该被过滤吗?只有代码,没有文本。你希望发生什么?现在发生了什么?
      错误报告(E_ALL);
      =>注意:未定义变量:第81行x.php中的URL谢谢。这已经对它进行了排序,您能解释一下为什么它被修复了吗?@Mike:
      global$URL;
      将根据现有的全局变量在函数的局部范围内重新声明
      $URL
      。哦,在结尾处将
    • 修复为
      回音行也是如此,这要归功于@KurtFunai。@djaqeel:请直接阅读我在你上面的评论。我会编辑答案,以包含此更改。他已经在他的代码中调用了
      showMenu
      ,所以我不会将其包含在我的答案中。谢谢你,我甚至没有注意到缺少的/。你为什么更喜欢后者?有p吗性能提高?或者这只是个人的事情,将其解析为函数有什么好处吗?“软件中的全局变量通常是一个坏主意。它们可以神奇地将信息从程序中的一个地方传送到另一个地方,这种方式很难理解。因此,它们会导致微妙的错误,使维护变得困难,并杀死小猫。”。“-在需要和需要时使用它们,但这不仅仅是因为当有一种更为公认/标准的方法时,它将帮助你完成你想做的事情。像这样编写php函数会让你养成坏习惯。