PHP 减少并合并?数组分几步
PHP reduce and merge? an array in several steps
我正在尝试 reduce/merge 一个看起来像这样的数组
$test = Array
(
[0] => Array
(
[id] => 150023
[rowtext] => part 1
[rowpartnumber] => 4360
[qty] => 2.00
[min_delper] => 2021-07-28
)
[1] => Array
(
[id] => 150026
[rowtext] => part 2
[rowpartnumber] => 4360
[qty] => 2.00
[min_delper] => 2021-07-29
)
[2] => Array
(
[id] => 150023
[rowtext] => part 3
[rowpartnumber] => 4361
[qty] => 4.00
[min_delper] => 2021-08-22
)
[3] => Array
(
[id] => 150023
[rowtext] => part 4
[rowpartnumber] => 4362
[qty] => 2.00
[min_delper] => 2021-09-22
)
);
我想对[行部分编号]相同的[数量]求和,我可以用
实现
$summa_test = array_reduce($test, function ($a, $b) {
isset($a[$b['rowpartnumber']]) ? $a[$b['rowpartnumber']]['qty'] += $b['qty'] : $a[$b['rowpartnumber']] = $b;
return $a;
});
不过我也想把[rowpartnumer]相同的[id]加到[id]
所以输出应该是这样的:
Array
(
[0] => Array
(
[id] => 150023 150026
[rowtext] => part 1
[rowpartnumber] => 4360
[qty] => 4.00
[min_delper] => 2021-07-28
)
[1] => Array
(
[id] => 150023
[rowtext] => part 3
[rowpartnumber] => 4361
[qty] => 4.00
[min_delper] => 2021-08-22
)
[2] => Array
(
[id] => 150023
[rowtext] => part 4
[rowpartnumber] => 4362
[qty] => 2.00
[min_delper] => 2021-09-22
)
);
似乎无法理解它,所以请各位专家提供一点帮助,谢谢
如果 rowpartnumber
已经存在,您必须修改回调函数以将 id
连接到前一个。像这样:
$summa_test = array_reduce($test, function ($carry, $item) {
if (isset($carry[$item['rowpartnumber']])) {
$carry[$item['rowpartnumber']]['qty'] += $item['qty'];
$carry[$item['rowpartnumber']]['id'] .= " ".$item['id'];
}
else {
$carry[$item['rowpartnumber']] = $item;
}
return $carry;
});
我不知道这是否是一个问题,但由于连接 id
将成为一个字符串,其中可以找到多个 ID - 但只有一个时仍然是整数。如果这对您来说是个问题,有两个选择:
- 即使只有一个也转换为字符串
id
- 使用数组存储到多个id。
(我将参数名称更改为 PHP 文档中使用的名称 - 您可以将其更改回来,但通常保持这种方式是个好主意 - 其他人会更容易理解您的代码。)
我正在尝试 reduce/merge 一个看起来像这样的数组
$test = Array
(
[0] => Array
(
[id] => 150023
[rowtext] => part 1
[rowpartnumber] => 4360
[qty] => 2.00
[min_delper] => 2021-07-28
)
[1] => Array
(
[id] => 150026
[rowtext] => part 2
[rowpartnumber] => 4360
[qty] => 2.00
[min_delper] => 2021-07-29
)
[2] => Array
(
[id] => 150023
[rowtext] => part 3
[rowpartnumber] => 4361
[qty] => 4.00
[min_delper] => 2021-08-22
)
[3] => Array
(
[id] => 150023
[rowtext] => part 4
[rowpartnumber] => 4362
[qty] => 2.00
[min_delper] => 2021-09-22
)
);
我想对[行部分编号]相同的[数量]求和,我可以用
实现$summa_test = array_reduce($test, function ($a, $b) {
isset($a[$b['rowpartnumber']]) ? $a[$b['rowpartnumber']]['qty'] += $b['qty'] : $a[$b['rowpartnumber']] = $b;
return $a;
});
不过我也想把[rowpartnumer]相同的[id]加到[id] 所以输出应该是这样的:
Array
(
[0] => Array
(
[id] => 150023 150026
[rowtext] => part 1
[rowpartnumber] => 4360
[qty] => 4.00
[min_delper] => 2021-07-28
)
[1] => Array
(
[id] => 150023
[rowtext] => part 3
[rowpartnumber] => 4361
[qty] => 4.00
[min_delper] => 2021-08-22
)
[2] => Array
(
[id] => 150023
[rowtext] => part 4
[rowpartnumber] => 4362
[qty] => 2.00
[min_delper] => 2021-09-22
)
);
似乎无法理解它,所以请各位专家提供一点帮助,谢谢
如果 rowpartnumber
已经存在,您必须修改回调函数以将 id
连接到前一个。像这样:
$summa_test = array_reduce($test, function ($carry, $item) {
if (isset($carry[$item['rowpartnumber']])) {
$carry[$item['rowpartnumber']]['qty'] += $item['qty'];
$carry[$item['rowpartnumber']]['id'] .= " ".$item['id'];
}
else {
$carry[$item['rowpartnumber']] = $item;
}
return $carry;
});
我不知道这是否是一个问题,但由于连接 id
将成为一个字符串,其中可以找到多个 ID - 但只有一个时仍然是整数。如果这对您来说是个问题,有两个选择:
- 即使只有一个也转换为字符串
id
- 使用数组存储到多个id。
(我将参数名称更改为 PHP 文档中使用的名称 - 您可以将其更改回来,但通常保持这种方式是个好主意 - 其他人会更容易理解您的代码。)