完全被这个难住了。我有一些代码从数据库中提取行并尝试将它们作为 PHP while() 循环的一部分进行处理。这是基本代码:
$i = 1;
while (list($thisScoreID, $thisClassifier, $thisRAW) = mysqli_fetch_array($r, MYSQLI_NUM)){
// Grab the reference time that's relevant to this iteration of the loop
$thisReference = $referenceArrayL6[$thisClassifier];
// Calculate a percentage from scratch, using the reference time and RAW score
$thisPercent = 50.00;
echo "Line ".$i." of data...", PHP_EOL;
$i++;
表中有 4529 行数据,当我如图所示运行它(通过命令行)时,它显示正确的行数,即最后一行显示为“数据的第 4529 行...”
但是,我实际上不想对百分比进行硬编码。我想做一个计算,用新的百分比更新旧的百分比。这是我真正想要运行的代码版本:
$i = 1;
while (list($thisScoreID, $thisClassifier, $thisRAW) = mysqli_fetch_array($r, MYSQLI_NUM)){
// Grab the reference time that's relevant to this iteration of the loop
$thisReference = $referenceArrayL6[$thisClassifier];
// Calculate a percentage from scratch, using the reference time and RAW score
$thisPercent = (($thisReference / $thisRAW)*100);
$thisPercent = number_format($thisPercent,3);
echo "Line ".$i." of data...", PHP_EOL;
$i++;
令人疯狂的是,这段代码现在跳过了 98 条记录。它返回“数据的第 4431 行...”作为最后一行。这并不是说将硬编码值更改为动态值是一个问题;而是将其更改为动态值。我可以将运算符更改为加法或乘法,效果很好。
当我发现乘法有效时,我尝试用倒数相乘而不是除法,但这也导致了失败。
我发现数据库中的值都不为零,因此它与“除以零”问题无关。
我能找到的唯一线索是这是最近的发展。分数可以追溯到 1999 年,我们最近更改了分数的输入方式。看来,在最后 124 个分数中,有 26 个“工作”和 98 个被跳过。但当我查看这些分数时,它们似乎只是正常的非零数字,就像旧分数一样。
我知道这必须与我们输入分数的方式的变化有关,但由于分数仍然显示为正常的非零数字(并且它们被输入为数字,而不是字符串),我很困惑什么可能会导致此问题。
我在 StackOverflow 和其他网站上进行了大量搜索,但要么我使用了错误的搜索词,要么这不是一个常见问题;我还没找到任何有用的东西。
如有任何帮助,我们将不胜感激。谢谢。
@Barmar 建议我打印出变量数据,只是为了确认它们的值。我已经进行了搜索以验证不存在零值,但我没有想到检查 NULL 值。其中一个值结果为 NULL,这导致了被零除的问题。一旦我将该数据标记为不可用并重新运行脚本,一切就都到位了。