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_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
基本上是每个数组的总和,它们具有相同的 Batch_No
和 Prod_ID
.
一直在尝试探索现有主题,但由于这两个键而无法解决问题。
我不太清楚你所说的 "summarize the array using Batch_No and Prod_ID" 是什么意思:我在 Prod_ID 中看不到 'uniqueness'。 Hoewever,以下代码将创建一个数组($totals
),其中只有唯一的 'Batch_No'
,对于那些,Expire
、Prod_ID
和 [的所有(第一个)匹配值=15=],以及 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
中找到的数量添加到已存储的数量中。
我有来自 $_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
基本上是每个数组的总和,它们具有相同的 Batch_No
和 Prod_ID
.
一直在尝试探索现有主题,但由于这两个键而无法解决问题。
我不太清楚你所说的 "summarize the array using Batch_No and Prod_ID" 是什么意思:我在 Prod_ID 中看不到 'uniqueness'。 Hoewever,以下代码将创建一个数组($totals
),其中只有唯一的 'Batch_No'
,对于那些,Expire
、Prod_ID
和 [的所有(第一个)匹配值=15=],以及 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
中找到的数量添加到已存储的数量中。