我使用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>";
}
?>
数据库包含变量id
,uname
和rank
。我想通过从数据库中读取并从数组中推断来确定排名。当我取出函数getrank
时,它会在数据库中打印排名,但是当我添加它时,它无法正常工作。
答案 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;
}
}
}