PHP:数组编号之间的差异不完全

时间:2018-10-26 14:53:48

标签: php arrays loops difference subtraction

我创建了一个数组$numbers,该数组由从最小到最大的45个数字组成,没有数字出现两次:

$numbers = [5, 12, 24, 43, 60, 84, 87, 94, 124, 178, 226, 276, 313, 327, 336, 364, 367 , 368, 383, 399, 403, 434, 505, 539, 545, 582 , 584, 586, 651, 654, 676, 729, 739, 750, 754, 777, 788, 808, 814, 846, 857, 886, 895, 932, 999];

我还定义了空数组$differences

$differences = [];

并将$numbers中的元素数量另存为变量$amount

$amount = count($numbers);

我的目标是保存$numbers数组中$differences元素之间的所有差异,即:

$differences[] = $numbers[1] - $numbers[0];
$differences[] = $numbers[2] - $numbers[1];

我希望通过使用for循环来更有效地完成此过程:

for ($i = 1; $i < $amount; $i++) {
       $differences[] = $numbers[$i] - $numbers[$i-1];
    };

该循环似乎工作正常,但是,查看$differences的内容时,发现其中只存储了42个数字,而不是预期的44个。通过打印$differences可以看到它没有最后两个区别。

由于脚本似乎可以正常工作,并且循环的简单性没有留下很多错误的余地,所以我发现这种故障非常奇怪。

有人知道它可能是什么原因以及如何解决?

编辑:我从问题中分离出脚本的一部分,现在它实际上没有显示任何错误。我想我在其他地方犯了错误。

1 个答案:

答案 0 :(得分:1)

我运行了您的代码,它输出了44个结果,这里没有错误。

$numbers = [5, 12, 24, 43, 60, 84, 87, 94, 124, 178, 226, 276, 313, 327, 336, 364, 367 , 368, 383, 399, 403, 434, 505, 539, 545, 582 , 584, 586, 651, 654, 676, 729, 739, 750, 754, 777, 788, 808, 814, 846, 857, 886, 895, 932, 999];
$amount = count($numbers);
for ($i = 1; $i < $amount; $i++) {
  $differences[] = $numbers[$i] - $numbers[$i-1];
};
  var_dump($differences);

结果:

array(44) {
  [0]=>
  int(7)
  [1]=>
  int(12)
  [2]=>
  int(19)
  [3]=>
  int(17)
  [4]=>
  int(24)
  [5]=>
  int(3)
  [6]=>
  int(7)
  [7]=>
  int(30)
  [8]=>
  int(54)
  [9]=>
  int(48)
  [10]=>
  int(50)
  [11]=>
  int(37)
  [12]=>
  int(14)
  [13]=>
  int(9)
  [14]=>
  int(28)
  [15]=>
  int(3)
  [16]=>
  int(1)
  [17]=>
  int(15)
  [18]=>
  int(16)
  [19]=>
  int(4)
  [20]=>
  int(31)
  [21]=>
  int(71)
  [22]=>
  int(34)
  [23]=>
  int(6)
  [24]=>
  int(37)
  [25]=>
  int(2)
  [26]=>
  int(2)
  [27]=>
  int(65)
  [28]=>
  int(3)
  [29]=>
  int(22)
  [30]=>
  int(53)
  [31]=>
  int(10)
  [32]=>
  int(11)
  [33]=>
  int(4)
  [34]=>
  int(23)
  [35]=>
  int(11)
  [36]=>
  int(20)
  [37]=>
  int(6)
  [38]=>
  int(32)
  [39]=>
  int(11)
  [40]=>
  int(29)
  [41]=>
  int(9)
  [42]=>
  int(37)
  [43]=>
  int(67)
}