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


Why is my PHP function not producing any output?

下面的代码显示了一个多维数组和一个函数,该函数循环遍历该数组以回显出一个嵌套的带有链接的菜单。

然而,该函数似乎没有工作,因为没有任何内容被回显。

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

<?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(); ?>

退后一步后,我注意到了你的问题。将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>";
}

您已经在函数的作用域之外声明了$urls。在以后的问题中,请告诉我们你的代码有什么问题,而不是让我们猜测。

URLS是在showMenu函数的作用域之外定义的,所以它不知道这个函数存在。您可以使用全局方法将其引入:

function showMenu() {
  global $urls;
  [...]
}

或者您可以将其作为变量传递:

$urls = array();
function showMenu($urls) {
  [...]
}
showMenu($urls);

或者你可以在函数本身中定义$urls。

另外,您可能有兴趣知道您不必显式地为数组编号。你可以更容易地输入:

$urls = array(
  array()
  ,array()
  ,array()
);

您正试图从函数内部访问$urls变量,这是不可能的。必须将数组传递给函数,或者让函数知道这是一个全局变量。下面是修改后的代码:

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); ?>

我也修复了缺失的/在关闭<li>

您还缺少结束列表元素的斜杠:

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

echo "<li><a href='".$urls[$i][1]."' title='".$urls[$i][2]."'>".$urls[$i][0]."</a></li>";

在函数外声明数组,因此它在函数内没有任何作用域。要么将数组声明为全局变量,要么将数组传递给函数。我更喜欢后者。

你忘了写

global $urls;

放在showMenu函数的顶部。

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