php - 当两个值的值不同时如何从数组中删除数组值
问题描述
我有两个数组,我想从 array2中删除重复记录。我不想在数组 2 中记录 link_id 35,因为数组 1 中存在 link_id 35 记录,因此它不会显示在数组 2 中。
我尝试使用 array_map 和 Unique 方法,但效果不佳,因为我认为这两个数组的值不同。
$array1=
[0] => stdClass Object
(
[link_id] => 35
[link_name] => Test Listerine cool mint packets 3 pack
[alias] => aa
[link_desc] =>
[user_id] => 47
[link_hits] => 103
[link_votes] => 1
[link_rating] => 5.000000
[link_featured] => 0
[link_published] => 1
[link_approved] => 1
[link_template] =>
)
[1] => stdClass Object
(
[link_id] => 373
[link_name] => Test Subject Data Collection Fish Fresh Yellow Tail
[alias] => ba
[link_desc] =>
[user_id] => 47
[link_hits] => 198
[link_votes] => 8
[link_rating] => 2.875000
[link_featured] => 0
[link_published] => 1
[link_approved] => 1
[link_template] =>
)
$array2 =
[0] => stdClass Object
(
[link_id] => 35
[link_name] => Test Listerine cool mint packets 3 pack
[link_desc] =>
[lat] => 0.000000
[lng] => 0.000000
[contactperson] =>
[cat_name] => AA - Made in USA
[link_votes] => 1
[link_rating] => 5.000000
[link_featured] => 0
[value] => 30020864
)
[1] => stdClass Object
(
[link_id] => 541
[link_name] => Test Subject Data Collection Fish Fresh Yellow Tail
[link_desc] =>
[lat] => 25.182573
[lng] => -80.093079
[country] => United States
[postcode] => 33431
[contactperson] => Captain Jack Certified Charters
[cat_name] => BA - Product of USA
[link_votes] => 8
[link_rating] => 2.875000
[link_featured] => 0
[value] => NA
)
解决方案
你可以用array-filter做到这一点。首先ids
从第一个数组中提取所有元素,然后根据这些 id 过滤第二个数组。
$arr1 = array( (object) ["link_id"=> 35, "key" => "AAA"], (object) ["link_id"=> 373, "key" => "BBB"]);
$arr2 = array( (object) ["link_id"=> 35, "key" => "CCC"], (object) ["link_id"=> 341, "key" => "DDD"]);
$ids = array_column($arr1, "link_id");
$arr2 = array_filter($arr2, function ($e) use ($ids) {
return !in_array($e->link_id, $ids); //keep him in arr2 only if NOT in ids of arr1
});
更新更快的答案考虑大量数据(至于@mickmackusa 评论)使用这个:
$ids = [];
foreach($arr1 as $e)
$ids[$e->link_id] = true;
$arr2 = array_filter($arr2, function ($e) use ($ids) {
return !isset($ids[$e->link_id]);
});
第一个解决方案在O(n^2)
,第二个解决方案在O(n)
推荐阅读
- php - 拒绝所有不适用于pdf和图像
- angular - 'zsh: command not found: ng' 在 Mac Catalina 上 Visual Studio Code 的集成终端中
- java - 按下回车键时,Spring 和 Vue.js 不支持请求方法“POST”
- c++ - 将向量转换为向量时的段错误
> - python - 检查用户是否在不和谐的 vc 中进行流式传输
- python-3.x - discord.py 如何在嵌入中编辑图像?
- python - 在 Seaborn 中绘制分类数据
- mysql - Mysql Inner Join 和 Group By 重复行
- docker - Nginx 反向代理到 Docker 502 错误网关
- javascript - 显示部分时如何在重新加载页面后显示内容?