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

时间:2015-03-09 10:19:46

标签: php arrays summary

我有来自$_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_No Prod_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基本上是每个数组的TOTAL,它们具有相同的Batch_NoProd_ID

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

1 个答案:

答案 0 :(得分:1)

我并不完全清楚你的意思是"使用Batch_No和Prod_ID来总结数组":我看不到'唯一性'在Prod_ID中。 Hoewever,以下代码将创建一个仅包含唯一$totals的数组('Batch_No'),对于这些数组,所有(第一个)匹配值为Expire,{{1} }和Prod_ID,以及zID_Line'的总和。

Qty

它通过迭代POST值来工作。对于$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]; } } 中找到的每个值,它会尝试在Batch_No中找到它。如果不存在,请添加它。如果已经存在,请保留大部分值,但将$totals中找到的数量添加到已存储的数量中。