添加功能会停止整个脚本?

时间:2015-01-24 10:08:48

标签: php mysql

我使用mysql_query从我的数据库中检索信息并将信息打印到表格中。

<?php
    $ranklist = [60, 250, 550, 900, 1350, 1800, 2350, 3000];
    while ($row = mysql_fetch_array($query)) {
        echo "<tr>";
        echo "<td>"$row[uname]"</td>";
        function getrank($userrank) {
            foreach ($ranklist as &$val) {
                if ($val > $userrank) {
                    return $val;
                }
            }
        }
        echo "<td>"$row[rank]"</td>";
        echo "</tr>";
    }
?>

数据库包含变量idunamerank。我想通过从数据库中读取并从数组中推断来确定排名。当我取出函数getrank时,它会在数据库中打印排名,但是当我添加它时,它无法正常工作。

4 个答案:

答案 0 :(得分:2)

如果您主动报告错误或查看错误日志,则会看到“致命错误,无法重新声明功能getrank”。你在循环中声明了这个函数。这意味着,在循环的每次迭代中,它都试图重新声明该函数。那不行。

你根本就没有调用过这个功能,所以我不确定它为什么会这样。

更不用说你弄乱了引号和变量的语法错误。

答案 1 :(得分:1)

您无法在while语句中定义函数。尝试类似:

   function getrank($userrank) {
        $ranklist = [60, 250, 550, 900, 1350, 1800, 2350, 3000];
        foreach ($ranklist as $val) {
            if ($val > $userrank) {
                return $val;
            }
        }
    }


while ($row = mysql_fetch_array($query)) {
    echo "<tr>";
    echo "<td>".$row['uname']."</td>";
    $rank = getrank($row['rank']);
    echo "<td>$rank</td>";
    echo "</tr>";
}

答案 2 :(得分:0)

你不能把你的功能放在while循环中。这意味着你每次迭代循环时都会尝试重新声明你的函数,这是不可能的。

相反,将函数放在外面,例如,放在页面顶部,只需从循环中调用它。

<?php
function getrank($userrank) {
    $ranklist = array(60, 250, 550, 900, 1350, 1800, 2350, 3000);
    foreach ($ranklist as &$val) {
        if ($val > $userrank) {
            return $val;
        }
    }
}

while ($row = mysql_fetch_array($query)) {
    echo "<tr>";
    echo "<td>{$row['uname']}</td>";
    echo "<td>" . getrank($row['rank']) . "</td>";
    echo "</tr>";
}
?>

但在这种情况下,你实际上根本不需要这个功能。你只使用它一次,它不是一个很长的代码。所以你可以把它们放在一起,没有这样的功能:

<?php
$ranklist = array(60, 250, 550, 900, 1350, 1800, 2350, 3000);
while ($row = mysql_fetch_array($query)) {
    echo "<tr>";
    echo "<td>{$row['uname']}</td>";
    foreach ($ranklist as &$val) {
        if ($val > $userrank) {
            echo "<td>$val</td>";
            break; // exit the foreach loop
        }
    }
    echo "</tr>";
}
?>

另请注意,我修复了封装在字符串中的变量以及错误的数组声明。

答案 3 :(得分:-1)

正如这里的人说你不能在循环中声明函数。但是如果你仍然想要这样做,你可以使用匿名函数。

所以,你需要改变它:

function getrank($userrank) {
        foreach ($ranklist as &$val) {
            if ($val > $userrank) {
                return $val;
            }
        }
    }

对此:

function($userrank) {
        foreach ($ranklist as &$val) {
            if ($val > $userrank) {
                return $val;
            }
        }
    }