Php数组:为键'y'的相同值添加键'x'的值[重复]

qvsjd97n  于 2023-04-19  发布在  PHP
关注(0)|答案(2)|浏览(95)

此问题已在此处有答案

Group array data on one column and sum data from another column to form a flat associative array(5个答案)
5年前关闭。
如何将key 0of inner arrays 的值与key 2of inner arrays 的值相加?
谢谢你的帮助,我在这个问题上卡住了。让我解释一下,我有这样的数组。

array (size=6)
  0 => 
    array (size=4)
      0 => float 10002
      1 => string 'xxxyyyy' (length=7)
      2 => float 5.00
      3 => float 0
  1 => 
    array (size=4)
      0 => float 10002
      1 => string 'xxxyyyy' (length=7)
      2 => float 5.00
      3 => float 4.25
  2 => 
    array (size=4)
      0 => float 10002
      1 => string 'xxxyyyy' (length=7)
      2 => float 5.00
      3 => float 0
  3 => 
    array (size=4)
      0 => float 10010
      1 => string 'yyyyyyy' (length=7)
      2 => float 10.00
      3 => float 0
  4 => 
    array (size=4)
      0 => float 10010
      1 => string 'yyyyyyy' (length=7)
      2 => float 10.00
      3 => float 1.85
  5 => 
    array (size=4)
      0 => float 10010
      1 => string 'yyyyyyy' (length=7)
      2 => float 10.00
      3 => float 0

是否可能得到这个结果(如果key0值与内部数组相同,则对key2值求和)

sum_key_2 = 15, for key_0 = 10002
sum_key_2 = 30, for key_0 = 10010

我尝试了这个,但没有得到想要的输出:

$bill = 0; $sp_no = array();
foreach($data as $innerKey => $innerArray) {
  $sp_no[] = $innerArray[0];
}

foreach($data as $k => $val) {
  if ($sp_no[$k] == $val[0]) {
    $bill += $val[2];
  }
}
echo $bill;
nbysray5

nbysray51#

您可以先使用key_0作为键对它们进行分组,然后将每个对应的key_2添加到key_0组中

$result = [];                            // Initialize result array
foreach ($data as $value) {              // Loop thru data array
    if (!isset($result[$value[0]])) {    // Check if key_0 is on result array
        $result[$value[0]] = $value[2];  // Create new with value of key_2
    } else {
        $result[$value[0]] += $value[2]; // Increment with value of key_2
    }
}

// Printing result
foreach ($result as $key => $value) {
    echo 'sum_key_2 = ' . $value . ', for key_0 =' . $key . '<br>';
}
0kjbasz6

0kjbasz62#

您可以尝试此解决方案
我假设您将尝试匹配array[0]和array[2]

$fullArray = [
    0 =>
        [
            0 => 10002,
            1 => 'xxxyyyy',
            2 => 5.00,
            3 => 0,
        ],
    1 =>
        [
            0 => 10002,
            1 => 'xxxyyyy',
            2 => 5.00,
            3 => 4.25,
        ],
    2 =>
        [
            0 => 10002,
            1 => 'xxxyyyy',
            2 => 5.00,
            3 => 0,
        ],
    3 =>
        [
            0 => 10010,
            1 => 'yyyyyyy',
            2 => 10.00,
            3 => 0,
        ],
    4 =>
        [
            0 => 10010,
            1 => 'yyyyyyy',
            2 => 10.00,
            3 => 1.85,
        ],
    5 =>
        [
            0 => 10010,
            1 => 'yyyyyyy',
            2 => 10.00,
            3 => 0,
        ]
];

for($i = 0; $i < count($fullArray); $i++) {
    if($fullArray[0][$i] != $fullArray[2][$i]) {
        // do your logic here
    } else {
        //do else logic here
    }
}

相关问题