php - 如何从多维数组中删除重复的值?

标签 php multidimensional-array duplicates filtering

我有来自两个单独的mysql查询的数组数据。数组数据如下所示:

0
:
{user_id: 82, ac_type: 1,…}
1
:
{user_id: 80, ac_type: 5,…}
2
:
{user_id: 76, ac_type: 1,…}
3
:
{user_id: 82, ac_type: 1,…}
4
:
{user_id: 80, ac_type: 5,…}


我想删除重复的数组项。

因此,我的输出将如下所示:

0
:
{user_id: 82, ac_type: 1,…}
1
:
{user_id: 80, ac_type: 5,…}
2
:
{user_id: 76, ac_type: 1,…}


我想通过user_id检查重复项。

我尝试了以下解决方案,但都无法正常工作。

$input = array_unique($res, SORT_REGULAR);

$input = array_map("unserialize", array_unique(array_map("serialize", $res)));

我也在下面尝试过。

$results = array();

foreach ($res as $k => $v) {
        $results[implode($v)] = $v;
}

$results = array_values($results);
print_r($results);


但是仍然存在重复数据。

最佳答案

您无需为此任务执行任何自定义函数调用。只需使用array_column()为每个子数组分配新的临时键,然后重新索引这些子数组并打印到屏幕。 *这确实会覆盖以后的事件。

代码:(Demo

$array=[
    ['user_id'=>82,'ac_type'=>1],
    ['user_id'=>80,'ac_type'=>5],
    ['user_id'=>76,'ac_type'=>1],
    ['user_id'=>82,'ac_type'=>2],
    ['user_id'=>80,'ac_type'=>6]
];
var_export(array_values(array_column($array,NULL,'user_id')));


输出:

array (
  0 => 
  array (
    'user_id' => 82,
    'ac_type' => 2,
  ),
  1 => 
  array (
    'user_id' => 80,
    'ac_type' => 6,
  ),
  2 => 
  array (
    'user_id' => 76,
    'ac_type' => 1,
  ),
)




如果要保留第一次出现的内容并忽略所有后续重复项,则可以这样做:

代码:(Demo)(*保持第一次出现)

$array=[
    ['user_id'=>82,'ac_type'=>1],
    ['user_id'=>80,'ac_type'=>5],
    ['user_id'=>76,'ac_type'=>1],
    ['user_id'=>82,'ac_type'=>2],
    ['user_id'=>80,'ac_type'=>6]
];

foreach($array as $a){
    if(!isset($result[$a['user_id']])){
        $result[$a['user_id']]=$a;      // only store first occurence of user_id
    }
}
var_export(array_values($result));  // re-index


输出:

array (
  0 => 
  array (
    'user_id' => 82,
    'ac_type' => 1,
  ),
  1 => 
  array (
    'user_id' => 80,
    'ac_type' => 5,
  ),
  2 => 
  array (
    'user_id' => 76,
    'ac_type' => 1,
  ),
)




如果您不介意丢失子数组的顺序,则可以将array_reverse()array_column()一起使用,以使用临时键保留第一个匹配项,然后使用array_values()重新索引:

var_export(array_values(array_column(array_reverse($array),NULL,'user_id')));
/*
array (
  0 => 
  array (
    'user_id' => 76,
    'ac_type' => 1,
  ),
  1 => 
  array (
    'user_id' => 82,
    'ac_type' => 1,
  ),
  2 => 
  array (
    'user_id' => 80,
    'ac_type' => 5,
  ),
)
*/

关于php - 如何从多维数组中删除重复的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45603614/

相关文章:

php裁剪非常大的图像

javascript - 在 Javascript 中使用 PHP 参数

php - 使用 PHP 创建 MongoDB 的 ISODate

python - 追加到维度未知的嵌套列表

java - 尝试求和时出错

ios - 如何在数组中只保留 X 个重复项?

mysql - 使用自定义逻辑删除重复行

php - 如何通过向数据库提交表单将 youtube 短 url 更改为可嵌入值?

multidimensional-array - C# 中的 PHP 多维

android - 修复Gradle错误 “Attribute ” xxx“已经在Android Studio中定义”的有效方法?