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

时间:2011-10-25 19:13:03

标签: php arrays function multidimensional-array echo

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

然而,该功能似乎没有工作,因为没有任何回应。

它有效,但我已经更改了一些包含,所以它可能与此有关吗?

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

6 个答案:

答案 0 :(得分:7)

退后一步,我发现了你的问题。将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。将来,请告诉我们您的问题代码有什么问题,而不是让我们猜测。

答案 1 :(得分:3)

URLS是在showMenu函数范围之外定义的,因此它不知道该函数是否存在。您可以使用全局方法将其引入:

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

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

$urls = array();

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

showMenu($urls);

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

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

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

答案 2 :(得分:2)

您正尝试从函数内部访问$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>

答案 3 :(得分:0)

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

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>";

答案 4 :(得分:0)

你在你的函数之外声明你的数组,所以它在你的函数中没有任何范围。要么将数组声明为全局,要么将数组传递给函数。我更喜欢后者。

答案 5 :(得分:0)

你忘记了

global $urls;

位于showMenu函数的顶部。

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