array_unique() 用于二维数组,但仅基于单个列 [重复]

问题描述 投票:0回答:1

例如

[
    ['foo' => 1, 'bar' => 2],
    ['foo' => 1, 'bar' => 3],
    ['foo' => 2, 'bar' => 4]
]

我想成为

[
    ['foo' => 1, 'bar' => 2],
    ['foo' => 2, 'bar' => 4]
]

基于

foo
的重复值。我不介意哪一个条目去,哪个都好。

我可以写一些东西来遍历数组并自己执行这个检查,但我想知道是否有一个内置函数(或它们的组合)可以实现这个结果?

php multidimensional-array duplicates filtering unique
1个回答
0
投票

但我想知道是否有内置函数(或组合 他们中的几个)可以达到这个结果

当然是。我的版本是执行以下操作:

  • 创建一个基于键值的子数组,其中创建的键是子数组的第一个键,与

    |
    (管道)和第一个键的值连接。因为,不能有重复的键,我们在这里使用
    array_map
    .

    实现唯一性
  • 现在,每个键值对都是子数组。所以我们使用

    array_merge
    合并它们,这使我们能够只保留唯一的值。

  • 由于在数组中实现了键值对子数组,我们使用

    foo|1
    删除人工制作的键(如
    foo|2
    array_values
    等)。

片段:

<?php

$result = array_values(array_merge(...array_map(fn($v) => [array_key_first($v). '|'. $v[array_key_first($v)] => $v], $d)));

print_r($result);

在线演示

© www.soinside.com 2019 - 2024. All rights reserved.