PHP将元素内的数组元素相减

时间:2018-08-08 17:39:31

标签: php arrays subtraction

我有一个数组[4,3,5,5,7,6],我想遍历排序后的数组,并从前一个值中减去最大值,然后从其后的值中减去余数,依此类推,最后,我循环完成时需要一个最终值。 例如 上面的数组将被排序为

Array
(
    [0] => 3
    [1] => 4
    [2] => 5
    [3] => 5
    [4] => 6
    [5] => 7
)

现在,我想找出arr[5] and arr[4]之间的差,结果将为1,然后从arr[3]中减去结果,依此类推,直到循环完成 这是我尝试过的方法,但似乎不起作用

for ($i = count($a)-1; $i >0; $i--){
        echo $result = $a[$i] - $a[$i-1];
        echo "<br />";
        if($result > 0) {
            if($result > $a[$i-2]) {
                echo $result = $result - $a[$i-2];
            } else {

            }
        }

5 个答案:

答案 0 :(得分:1)

我认为有一种更简单,更快速的方法可以实现:

$array = [4, 3, 5, 5, 7, 6];
rsort($array);
$result = $array[0] - $array[1];
for($i = 2, $count = count($array); $i < $count; $i++){
    $result = $array[$i] - $result;
}
print($result);

输出:

0

答案 1 :(得分:0)

您希望这样吗?

$a = [1,1,1,3,1,7];
$result = null;
for ($i = count($a)-1; $i >0; $i--){
  if($result == null)
      $result = $a[$i-1];
  echo $result = $a[$i] - $result;
  echo "<br />";
  if($result == 0) break;
}

答案 2 :(得分:0)

我的第一个答案是错误的,我看到您需要在第一个减法后丢弃2个键。

这可以完成工作:

<?php
$array = [3,4,5,5,6,7];
$reverse = array_reverse($array);

if (count($reverse) > 1) {
    $first = $reverse[0] - $reverse[1];
} else {
     //code should stop
}

$result = $first;

for ($i = 2; $i < count($reverse); $i++)  {
    $result = $reverse[$i] - $result;
}

echo $result;

输出0,就像您的示例一样。当然,此代码仍然需要检查以查看数组的键在迭代时是否确实存在

答案 3 :(得分:0)

要获得所需的期望输出,可以使用rsort对降序进行排序,并从最高编号开始。将前两个元素相减以获得初始值。循环遍历其余部分以获得结果。

这是您可以实现的方式:

$a = [4, 3, 5, 5, 7, 6]; // Your unsorted array

rsort($a); // Sort array by descending of largest to smallest

$result = $a[0] - $a[1]; // Initial subtraction of first two values

unset($a[0], $a[1]); // Remove from array so it won't loop through

foreach ($a as $_a) { // Loop through remainder and subtract difference
    $result = $_a - $result;
}

echo $result; // Show your result

收益:

0

如果您担心由于unset而导致的重新索引编制,您可以在此之后再添加一行:

$a = array_values($a); // Reindexes array starting at 0 if you desire

答案 4 :(得分:0)

$numbers = [4,3,5,5,7,6];
sort($numbers);
$numbers = array_reverse($numbers);
$first = array_shift($numbers);
$second = array_shift($numbers);
$result = array_reduce($numbers, function ($carry, $current_item) {
    return $current_item - $carry;
}, ($first - $second));
echo $result;