需要通过多个键中的重复值组合 PHP 数组
Need To combine PHP array by duplicate values in mulitple keys
我有一个包含超过 1000 个值的数组。该数组在 php 文件中,我会将结果 return 发送到另一个数组以输出到 excel 文件。将不胜感激
Array
(
[0] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => PXB
[low] => 24.99
)
[1] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => PXB
[low] => 31.99
)
[2] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => PXB
[low] => 38.99
)
[3] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 24.99
)
[4] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 31.99
)
[5] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 38.99
)
[6] => Array
(
[isbn] => 97845684978
[price] => 30.99
[po] => PXB
[low] => 18.99
)
[7] => Array
(
[isbn] => 97845684978
[price] => 30.99
[po] => PXB
[low] => 19.99
)
[8] => Array
(
[isbn] => 97845684978
[price] => 30.99
[po] => PXB
[low] => 23.99
)
)
我需要能够对数组和 return 输出进行排序,每个 po 都有一个 isbn,保持该 po 的最低值 low。我需要按 isbn、po 和 low 排序。所以我正在寻找一个输出:
Array
(
[0] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => PXB
[low] => 24.99
)
[1] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 31.99
)
[2] => Array
(
[isbn] => 97845684978
[price] => 30.99
[po] => PXB
[low] => 18.99
)
[3] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 15.99
)
使用usort过滤低价:
$array = //your array
function cmp($a, $b) {
if ($a['po'] == $b['po'] && $a['isbn'] == $b['isbn']) {
return ($a['low'] < $b['low']) ? -1 : 1;
}else{
return 0;
}
}
usort($array, 'cmp');
Foreach 循环重新填充数组。
$po = null;
$isbn = null;
$result = [];
foreach($array as $key =>$val){
if($val['po']==$po && $val['isbn']==$isbn){
}else{
$result[] = $val;
}
$isbn = $val['isbn'];
$po = $val['po'];
}
echo '<pre>';
print_r($result);
echo '</pre>';
我有一个包含超过 1000 个值的数组。该数组在 php 文件中,我会将结果 return 发送到另一个数组以输出到 excel 文件。将不胜感激
Array
(
[0] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => PXB
[low] => 24.99
)
[1] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => PXB
[low] => 31.99
)
[2] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => PXB
[low] => 38.99
)
[3] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 24.99
)
[4] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 31.99
)
[5] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 38.99
)
[6] => Array
(
[isbn] => 97845684978
[price] => 30.99
[po] => PXB
[low] => 18.99
)
[7] => Array
(
[isbn] => 97845684978
[price] => 30.99
[po] => PXB
[low] => 19.99
)
[8] => Array
(
[isbn] => 97845684978
[price] => 30.99
[po] => PXB
[low] => 23.99
)
)
我需要能够对数组和 return 输出进行排序,每个 po 都有一个 isbn,保持该 po 的最低值 low。我需要按 isbn、po 和 low 排序。所以我正在寻找一个输出:
Array
(
[0] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => PXB
[low] => 24.99
)
[1] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 31.99
)
[2] => Array
(
[isbn] => 97845684978
[price] => 30.99
[po] => PXB
[low] => 18.99
)
[3] => Array
(
[isbn] => 97845684684
[price] => 30.99
[po] => MXB
[low] => 15.99
)
使用usort过滤低价:
$array = //your array
function cmp($a, $b) {
if ($a['po'] == $b['po'] && $a['isbn'] == $b['isbn']) {
return ($a['low'] < $b['low']) ? -1 : 1;
}else{
return 0;
}
}
usort($array, 'cmp');
Foreach 循环重新填充数组。
$po = null;
$isbn = null;
$result = [];
foreach($array as $key =>$val){
if($val['po']==$po && $val['isbn']==$isbn){
}else{
$result[] = $val;
}
$isbn = $val['isbn'];
$po = $val['po'];
}
echo '<pre>';
print_r($result);
echo '</pre>';