我有以下从外部API动态生成的数组:
$purchases = array(
array('product_id' => 7, 'receipt' => R13D13),
array('product_id' => 5, 'receipt' => Y28Z14),
array('product_id' => 7, 'receipt' => R02310),
array('product_id' => 5, 'receipt' => E11403)
);期望产出:
$purchases_new = array(
array('product_id' => 7, 'receipt' => R13D13),
array('product_id' => 5, 'receipt' => Y28Z14)
);由于API的性质,我只能使用array_map来提取数据:
$purchases_unique = array_unique(
array_map(function($pid){ return $pid['product_id']; }, $purchases)
);
print_r($purchases_unique);输出
array((array[251] => 7) array([252] => 5))输出完全不是我想要的:(如何array_map 2列product_id'和receipt并删除基于product_id的重复行
我要做到以下几点:
array_map两列?(product_id和receipt)product_id基于product_id键的重复行?发布于 2019-08-14 03:58:15
发布于 2019-08-13 16:15:10
我认为这将满足您的需要:只需将唯一的product_ids (带有收据)添加到一个新数组中:
$purchases_new = array_reduce($purchases, function($acc, $p) {
if(!in_array($p['product_id'], array_column($acc, 'product_id'))) {
$acc[] = $p;
}
return $acc;
}, []);输出:
array (
0 =>
array (
'product_id' => 7,
'receipt' => 'R13D13',
),
1 =>
array (
'product_id' => 5,
'receipt' => 'Y28Z14',
),
)发布于 2019-08-13 20:11:42
根据注释It does not matter if it's the first or last occurrence,您可以使用一个foreach并为非复制项创建一个$result数组。
对于每次迭代,使用product_id作为数组键,并检查是否已经设置了它。
如果不是,那么添加它。
$purchases = array(
array('product_id' => 7, 'receipt' => "R13D13"),
array('product_id' => 5, 'receipt' => "Y28Z14"),
array('product_id' => 7, 'receipt' => "R02310"),
array('product_id' => 5, 'receipt' => "E11403")
);
$result = [];
foreach($purchases as $key => $purchase) {
if (!isset($result[$purchase["product_id"]])) {
$result[$purchase["product_id"]] = $purchase;
}
}
print_r($result);结果
Array
(
[7] => Array
(
[product_id] => 7
[receipt] => R13D13
)
[5] => Array
(
[product_id] => 5
[receipt] => Y28Z14
)
)https://stackoverflow.com/questions/57480203
复制相似问题