我正在创建一个简单的.php脚本
输出是一张图像(具有给定的宽度),这就是我得到的:
如您所见,在某些时候,条更高。这是因为图像通常不够宽,无法显示所有数字,因此,如果一个像素上放置的数字更多,则指示条会变高。
问题:有时此脚本运行良好,但偶尔会出现无数Notice错误:
通知:未定义的偏移量: 61
上/.../index.php中的 398通知:未定义的偏移量: 125 ,位于/.../index.php中的第 61
行通知::/./ index.php中第 61 ...
行中的未定义偏移: 192
该脚本如下,有一些说明:
更新:如Barmar所述,我代码中的第二个循环可以替换为
$max = max($data); $counts = array_count_values(array_map('toScale', $data));
看起来只是代码的简化,但是以某种方式可以解决问题。有什么想法吗?
答案 0 :(得分:3)
问题在于您在两个循环中缩放数字的方式不同。
在第一个循环中,您将在整个循环中每次更新$max
,然后调用toScale(data[$x])
。由于toScale()
依赖于$max
,因此某些数字将按比例缩放到不同的最大值。
在第二个循环中,一切都按比例缩放到最终最大值。因此,对于相同的$data[$a]
值,您这次将获得不同的toScale($data[$a])
。
在调用toScale
之前,您需要计算所有数字的最大值。一种方法是通过计算生成所有随机数的循环中的最大值:
$max = 0;
for ($a = 0; $a < $num; $a++) {
$rand = rand();
if ($rand > $max) {
$max = $rand;
}
$data[] = $rand;
}
或者您可以使用内置函数来做到这一点:
$max = max($data);
$counts = array_count_values(array_map('toScale', $data));