Php 将数组中的元素配对两个';然后求差和和

Php 将数组中的元素配对两个';然后求差和和,php,arrays,Php,Arrays,假设我有这个数组 $number = [2,1,4,3,6,2]; 首先将数组中的元素按2配对,并找出它们的差异 这是第一个需求中的输出 $diff[] = [1,1,4]; 第二,求和所有差额 这是最终输出 $sum[] = [6]; 条件: 数组大小始终为偶数 一对中的第一个元素总是大于第二个元素,因此它们之间没有负差异 到目前为止,我所做的只是计算一个数组的大小,然后我不知道如何将它们按2配对。图特 这在php中可能吗?有没有内置的函数来做这件事?好吧,考虑到你的情况,我想到了以

假设我有这个数组

$number = [2,1,4,3,6,2];
  • 首先将数组中的元素按2配对,并找出它们的差异 这是第一个需求中的输出

    $diff[] = [1,1,4];
    
  • 第二,求和所有差额 这是最终输出

    $sum[] = [6];
    
  • 条件:

  • 数组大小始终为偶数
  • 一对中的第一个元素总是大于第二个元素,因此它们之间没有负差异
  • 到目前为止,我所做的只是计算一个数组的大小,然后我不知道如何将它们按2配对。图特


    这在php中可能吗?有没有内置的函数来做这件事?

    好吧,考虑到你的情况,我想到了以下几点

    $number = [2,1,4,3,6,2];
    $total = 0;
    for($i = 0; $i < count($number); $i+=2) {
        $total += $number[$i] - $number[$i + 1];
    }
    
    $number=[2,1,4,3,6,2];
    $total=0;
    对于($i=0;$i
    一行:

    $number = [2,1,4,3,6,2];
    $total = array_sum(array_map(function ($array) {
        return current($array) - next($array); 
    }, array_chunk($number, 2)));
    echo $total;
    

    这应该很好:

    <?
    $number = array(2,1,4,3,6,2);
    for($i=0;$i<count($number); $i+=2){
        $dif[] = $number[$i] - $number[$i+1];
    }
    print_r($dif);
    $sum = 0;
    foreach ($dif as $item){
        $sum += $item;
    }
    echo 'SUM = '.$sum;
    ?>
    
    
    

    如果您希望保留所有不同的阶段

    $numbers = [2,1,4,3,6,2];
    $diff = [];
    for($i=0,$c=count($numbers);$i<$c;$i+=2)
    {
        $diff[] = $numbers[$i]-$numbers[$i+1];
    }
    $sum = array_sum($diff);
    
    $numbers=[2,1,4,3,6,2];
    $diff=[];
    
    对于($i=0,$c=count($numbers);$i请检查这是否适用于您

        <?php        
        $sum=0;
        $number = array(2,1,4,3,6,2);
        for ($i=0;$i<=count($number);$i++) {
        if ($i%2 == 1 ) {  
            $sum = $sum + $number[$i-1] - $number[$i];
        }
        }
    
        print $sum;
        ?>
    
    
    
    试试这个:

        $number = array(2,1,4,3,6,2);
    
        $diff = array();
        $v3 = 0;
        $i=1;
        foreach($number as $val){
        if ($i % 2 !== 0) {
            $v1 = $val;
        }
        if ($i % 2 === 0) {
            $v2 = $val;
            $diff[] = $v1-$v2;
            $v3+= $v1-$v2;       
            }
        $i++;
        }
        print $v3;//total value
        print_r($diff); //diff value array
    

    到目前为止,它提供了所需的解决方案

    $arr = array(2,1,4,3,6,2);
    $temp = 0;
    $diff = array();
    foreach ($arr as $key => $value) {
        if($key % 2 == 0) {
            $temp = $value;
        }
        else {
            $diff[] = $temp - $value;
        }
    }
    
    print_R($diff);
    print 'Total :' . array_sum($diff);
    

    注意:如果任何人知道任何预定义函数,而不能识别此代码,请更新。

    我试图理解您的问题,但从我的大脑中得到
    E\u PARSE\u错误
    。一种方法是使用两步for循环:例如
    for($I=0,$c=count($numbers)$i
    array\u chunk
    将数组按2分组,但这可能太过分了。他想要求差的和,而不是求平均值。可能需要一个abs()来处理像
    $number=[1,2,4,3,2,6];
    这样的情况,但其他方面是一个整洁的数组solution@MarkBakerOP已声明<代码>“一对中的第一个元素总是比第二个元素大”
    啊,好吧,错过了……但仍然是一个很好的解决方案这是一个有效的解决方案,基于投票我认为这是最好的。谢谢。为什么硬编码
    $max\u元素
    而不是使用
    计数($number)
    ?此代码需要很多改进-我建议查看我的答案,以获得更有效的for循环实现。希望您能够学习自己,改进代码和操作对不起!我同意count是正确的,我还更改为包含I%2==1,以检查这是否奇怪——这是我在php中对foru的第一个答复ms:-)
    $arr = array(2,1,4,3,6,2);
    $temp = 0;
    $diff = array();
    foreach ($arr as $key => $value) {
        if($key % 2 == 0) {
            $temp = $value;
        }
        else {
            $diff[] = $temp - $value;
        }
    }
    
    print_R($diff);
    print 'Total :' . array_sum($diff);