【发布时间】:2018-11-16 00:34:37
【问题描述】:
我正在创建一个简单的 .php 脚本
- 生成一个包含随机数(比如 1000 个整数)的数组
- 输出图像,其中显示所有这些数字的排列,范围从 0 到绘制的最大数字
输出是一个图像(具有给定宽度),这是我得到的:
如您所见,在某些时候,条形更高。这是因为图像通常不够宽,无法呈现所有数字,所以如果一个像素上有更多数字,那么条形图会更高。
问题:有时这个脚本运行良好,但偶尔我会收到很多通知错误:
注意:未定义的偏移量:398 in /.../index.php on line 61
注意:未定义的偏移量:125 in /.../index.php on line 61
注意:未定义的偏移量:192 in /.../index.php on line 61 ...
脚本如下,一些解释:
- 第 61 行标记为红色(下)
- 函数 toScale() 返回 intval(number / maxNumber * scaleWidth)
- inb4 不必要的 $counts[num]=0 双重声明,这就是我试图解决问题的方法,它似乎没有任何改变
- $counts 不在这两个部分之间的任何其他地方使用
- Notice 错误的数量永远不会等于总数,要么是少数,要么都没有。
更新:正如Barmar 提到的,我的代码中的第二个循环可以替换为
$max = max($data); $counts = array_count_values(array_map('toScale', $data));
看起来只是代码简化,但不知何故这解决了问题。为什么?
【问题讨论】:
-
将您的代码发布为纯文本,而不是图像。有关代码格式化帮助,请参阅 formatting。
-
你的第二个循环可以替换为
$max = max($data); $counts = array_count_values(array_map('toScale', $data)); -
很抱歉将我的代码放入图像中,我在尝试正确格式化时遇到了一些错误,以前从未发生过。 Barmar 的想法有效并解决了问题!但是,为什么上面的代码不起作用?
-
你在两个循环之间修改
$data吗? -
toScale() 中的 maxNumber 是如何确定的?如果它使用全局 $max,它会随着你填充 $counts 数组而改变,从而导致不一致的行为。