我有這個源陣列():
$source[]
[
["user_id": 1, "item_id": 991, "quantity": 100],
["user_id": 1, "item_id": 992, "quantity": 50],
["user_id": 1, "item_id": 993, "quantity": 300],
["user_id": 1, "item_id": 992, "quantity": 150],
["user_id": 2, "item_id": 991, "quantity": 75],
["user_id": 2, "item_id": 992, "quantity": 20],
["user_id": 3, "item_id": 991, "quantity": 200],
["user_id": 3, "item_id": 992, "quantity": 425],
["user_id": 3, "item_id": 991, "quantity": 100],
["user_id": 3, "item_id": 992, "quantity": 75]
]
我的目標是減少它,以便我只得到 1 個user_id與 &item_id相同的專案:
$result[]
[
["user_id": 1, "item_id": 991, "quantity": 100],
["user_id": 1, "item_id": 992, "quantity": 200],
["user_id": 1, "item_id": 993, "quantity": 300],
["user_id": 2, "item_id": 991, "quantity": 75],
["user_id": 2, "item_id": 992, "quantity": 20],
["user_id": 3, "item_id": 991, "quantity": 300],
["user_id": 3, "item_id": 992, "quantity": 500]
]
最終的方法是使用 array_reduce,但我將使用 foreach 回圈。
我試過這個,但我得到一個空陣列
$result = array_reduce($source, function($a, $b)
{
if (($a->user_id === $b->user_id) && ($a->item_id === $b->item_id))
{
$a->quantity = $b->quantity; return $a;
}
else
{
return $b;
}
}, []);
或者這個,但我得到一個陣列,user_id其索引和quantity值作為總和,而不是分開item_id:
$result = array_reduce($source, function($a, $b)
{
(($a[$b["user_id"]] = $a[$b["user_id"]]) && ($a[$b["item_id"]] = $a[$b["item_id"]])) ?? 0;
$a[$b["user_id"]] = $b["quantity"];
return $a;
}, []);
我開始嘗試使用foreach回圈,if (isset[...])但我覺得無論$result[]陣列的索引如何,它都會回傳 true 。
uj5u.com熱心網友回復:
您可以通過以下array_reduce方式使用函式:
$res = array_reduce (
$source,
function($res, $el) {
if (isset($res[$el['user_id'].$el['item_id']])) {
// if user_id with item_id exist
// increase quantity by $el['quantity']
$res[$el['user_id'].$el['item_id']]['quantity'] = $el['quantity'];
} else {
// create record with unique key for each user_id & item_id
// using concatenation
$res[$el['user_id'].$el['item_id']] = $el;
}
return $res;
},
[] // initial result - empty array
);
// output result values without keys
print_r(array_values($res));
PHP array_reduce 在線
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383236.html
上一篇:使用索引從物件陣列中洗掉物件?
