【发布时间】:2015-05-27 15:31:27
【问题描述】:
现在,一个非常友好的 StackOverflow 使用帮助我解决了很多问题,但是在我的代码准备就绪之前还有两个问题,任何想法都会很棒,因为我目前正在尖叫:
首先,我使用以下内容尝试从 MySQL 数据库中提取数据,将其作为数字数组返回并按 ID 排序。里面有 2 个项目,无论我做什么,我只能显示 1 个(当表格填满时,我需要它来显示所有数据):
$query = "SELECT * FROM batch ORDER by ID";
$result = $mysqli->query($query);
/* numeric array */
$row = $result->fetch_array(MYSQLI_NUM);
printf ("%s (%s)\n", $row[0], $row[1]);
?>
其次,稍微偏离主题,但下面的代码是由 StackOverflow 用户提供的,但是我无法让它工作,他们已经将它用于 OOP,这不是我熟悉的领域,无论我做什么纠正 $this-> 或 public / private 它仍然拒绝工作(代码的目的是在 $userinput 中有一个数字,它会根据 $widgetBatches 数组检查最接近的匹配(即输入是1100 和最接近的是 1000)然后从输入中扣除(留下 100)并且过程再次循环检查,这次返回 100 作为最接近的,这个过程继续直到 $userinput 达到 0 或负数:
<?php
$userinput = 10000; // Our magic variable - user input
$iterations = 0;
function Widget($userinput)
{
$this->iterations++;
$widgetRequested = $userinput;
$widgetBatches = array("250", "500", "1000", "2000");
echo "Iteration " . $iterations;
echo "<br/>";
echo "Widget requested: " . $widgetRequested;
echo "<br/>";
$closest = GetClosest($widgetBatches, $widgetRequested);
echo "Closest: " . $closest;
echo "<br/>";
$widgetRemaining = $widgetRequested - $closest;
echo "Remainder: " . $widgetRemaining;
echo "<hr/>";
if($widgetRemaining > 0)
{
Widget($widgetRemaining);
}
else
{
echo "The value is now below or equaling zero: " . $widgetRemaining . "!";
}
}
function GetClosest($array, $value)
{
$lowest = null;
foreach($array as $val)
{
if($lowest == null || abs($value - $lowest) > abs($val - $value))
{
$lowest = $val;
}
}
return $lowest;
}
?>
【问题讨论】:
-
把你的 fetch_array 放到一个 while 循环中 ->
while($row = $result->fetch_array(MYSQLI_NUM)){ printf ("%s (%s)\n", $row[0], $row[1]); } -
感谢您的快速回复 :) 刚刚尝试过,但它仍然不会让步,非常奇怪 - 编辑:我收回它,它现在似乎可以工作了,谢谢 :) 可能是我的错字! !对 OOP 有什么想法吗?
-
我对您发布的 PHP 代码感到有些困惑。如果您在使用 $this 时遇到问题,那是因为它在该上下文中没有任何意义。如果你想让它有意义,那么整个代码块需要被包装在一个类中。或者,如果您确实需要该信息,您可以将 $iterations 作为参数传递给 Widget 函数。Like this.
-
您的第二个代码块不是 OOP,它只是常规函数。所以
$this->/public/private将不起作用,除非您使用Class而不是function将代码更改为OOP。注意 -$this->iterations++;不会做任何事情,因为您的$iteration不在函数 php.net/manual/en/language.variables.scope.php 的范围内 -
在您当前的代码格式中,这是一种在您的函数stackoverflow.com/a/4127831/689579 中更改/增加
$iteration的方法