我使用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
时,它会打印数据库中的排名,但是当我添加它时,它没有任何作用。
如果您主动报告错误或查看错误日志,您将看到"致命错误,无法重新声明函数getrank
"。您是在循环中声明函数。这意味着,在循环的每次迭代中,它都会尝试重新声明函数。那行不通。
你也从来没有调用过这个函数,所以我不确定为什么它甚至在那里。
更不用说里面乱七八糟的引号和变量的语法错误了。
不能在 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>";
}
你不能把你的函数放在 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>";
}
?>
另请注意,我修复了封装在字符串中的变量和错误的数组声明。
正如这里的人所说,你不能在循环中声明函数。但是,如果您仍然想这样做,则可以使用匿名函数。
因此,您只需更改此设置:
function getrank($userrank) {
foreach ($ranklist as &$val) {
if ($val > $userrank) {
return $val;
}
}
}
对此:
function($userrank) {
foreach ($ranklist as &$val) {
if ($val > $userrank) {
return $val;
}
}
}