首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP-2列并按键删除重复行

PHP-2列并按键删除重复行
EN

Stack Overflow用户
提问于 2019-08-13 14:45:09
回答 3查看 622关注 0票数 2

我有以下从外部API动态生成的数组:

代码语言:javascript
复制
$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)
);

期望产出:

代码语言:javascript
复制
$purchases_new = array(
    array('product_id' => 7, 'receipt' => R13D13),
    array('product_id' => 5, 'receipt' => Y28Z14)
);

由于API的性质,我只能使用array_map来提取数据:

代码语言:javascript
复制
$purchases_unique = array_unique(
    array_map(function($pid){ return $pid['product_id']; }, $purchases)
);
print_r($purchases_unique);

输出

代码语言:javascript
复制
array((array[251] => 7) array([252] => 5))

输出完全不是我想要的:(如何array_map 2列product_id'receipt并删除基于product_id的重复行

我要做到以下几点:

  1. array_map两列?(product_idreceipt)
  2. 删除product_id基于product_id键的重复行?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-14 03:58:15

如果您想要第一次出现,请使用@TheFirstBird回答。如果您想得到最后一次,可以使用array_columnarray_values进行简单的购买,如下所示:

代码语言:javascript
复制
$newArr = array_values(array_column($purchases, null, "product_id")); 

注意,array_column的第二个参数是null,意思是取整个元素。

实例:3v4l

参考资料:数组列数组值

票数 1
EN

Stack Overflow用户

发布于 2019-08-13 16:15:10

我认为这将满足您的需要:只需将唯一的product_ids (带有收据)添加到一个新数组中:

代码语言:javascript
复制
$purchases_new = array_reduce($purchases, function($acc, $p) {
    if(!in_array($p['product_id'], array_column($acc, 'product_id'))) {
        $acc[] = $p;
    }
    return $acc;
}, []);

输出:

代码语言:javascript
复制
array (
  0 => 
  array (
    'product_id' => 7,
    'receipt' => 'R13D13',
  ),
  1 => 
  array (
    'product_id' => 5,
    'receipt' => 'Y28Z14',
  ),
)

在网上试试!

票数 1
EN

Stack Overflow用户

发布于 2019-08-13 20:11:42

根据注释It does not matter if it's the first or last occurrence,您可以使用一个foreach并为非复制项创建一个$result数组。

对于每次迭代,使用product_id作为数组键,并检查是否已经设置了它。

如果不是,那么添加它。

代码语言:javascript
复制
$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);

结果

代码语言:javascript
复制
Array
(
    [7] => Array
        (
            [product_id] => 7
            [receipt] => R13D13
        )

    [5] => Array
        (
            [product_id] => 5
            [receipt] => Y28Z14
        )

)

Php演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57480203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档