PHP 组数组由两个键并得到总数


PHP group array by two keys and get total

我有来自$_POST的长数组(可能是数百个),需要总结数量。

以下是$_POST结果:

array(5) {
  ["Batch_No"]=>
  array(3) {
    [0]=>
    string(7) "AAAV343"
    [1]=>
    string(7) "AAAV343"
    [2]=>
    string(7) "AAAV347"
  }
  ["Expire"]=>
  array(3) {
    [0]=>
    string(0) ""
    [1]=>
    string(0) ""
    [2]=>
    string(0) ""
  }
  ["Prod_ID"]=>
  array(3) {
    [0]=>
    string(5) "00041"
    [1]=>
    string(5) "00041"
    [2]=>
    string(5) "00041"
  }
  ["zID_Line"]=>
  array(3) {
    [0]=>
    string(2) "17"
    [1]=>
    string(2) "17"
    [2]=>
    string(2) "17"
  }
  ["Qty"]=>
  array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "1"
    [2]=>
    string(1) "1"
  }
}

我需要使用 Batch_NoProd_ID 来总结数组,以便结果变成这样:

array(5) {
  ["Batch_No"]=>
  array(2) {
    [0]=>
    string(7) "AAAV343"
    [1]=>
    string(7) "AAAV347"
  }
  ["Expire"]=>
  array(2) {
    [0]=>
    string(0) ""
    [1]=>
    string(0) ""
  }
  ["Prod_ID"]=>
  array(2) {
    [0]=>
    string(5) "00041"
    [1]=>
    string(5) "00041"
  }
  ["zID_Line"]=>
  array(2) {
    [0]=>
    string(2) "17"
    [1]=>
    string(2) "17"
  }
  ["Qty"]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "1"
  }
}

Qty基本上是具有相同Batch_NoProd_ID的每个数组的总和。

一直在尝试探索现有主题,但由于这两个关键而无法解决问题。

我不完全清楚你所说的"使用 Batch_No 和 Prod_ID 总结数组"是什么意思: 我在Prod_ID中没有看到"唯一性"。 Hoewever,下面的代码将创建一个数组($totals),只有唯一的'Batch_No',对于那些,所有(第一个)匹配的值为ExpireProd_IDzID_Line, 和Qty的总和。

$totals = array(
    'Batch_No' => array(),
    'Expire' => array(),
    'Prod_ID' => array(),
    'zID_Line' => array(),
    'Qty' => array(),
);
foreach($_POST['Batch_No'] as $key => $value) {
    if ($key2 = array_search($value, $totals['Batch_No'])) {
        $totals['Qty'][$key2] += $_POST['Qty'][$key];
    } else {
        $totals['Batch_No'][] = $_POST['Batch_No'][$key];
        $totals['Expire'][]   = $_POST['Expire'][$key];
        $totals['Prod_ID'][]  = $_POST['Prod_ID'][$key];
        $totals['zID_Line'][] = $_POST['zID_Line'][$key];
        $totals['Qty'][]      = $_POST['Qty'][$key];
    }
}

它通过迭代 POST 值来工作。对于在Batch_No中找到的每个值,它试图在$totals中找到它。如果不存在,请添加它。如果已经存在,请保留大多数值,但将Qty中找到的数量添加到已存储的数量中。