php - 从数组 + json 中删除重复项,array_unique 的问题
问题描述
我有类似的数组:
Array (
[0]=>{"a":"b", "c":"d", "h":"e"}
[1]=>{"a":"b", "f":"g"}
)
我如何在这里删除重复项?我正在尝试 array_unique,但它不起作用。
预期结果:
Array (
[0]=>{"a":"b", "c":"d", "h":"e"}
[1]=>{"f":"g"}
)
解决方案
您可以使用array_diff()和unset()函数来做到这一点。但是,您需要首先解码此 JSON 值:
foreach($ar as $in => &$js){
$ar[$in] = json_decode($js,true);
}
在此之后$ar
有如下视图:
Array
(
[0] => Array
(
[a] => b
[c] => d
[h] => e
)
[1] => Array
(
[a] => b
[f] => g
)
)
在这里您可以应用array_diff()
功能:
$diff = array_diff($ar[1],array_diff($ar[1],$ar[0]));
它将从[1]
索引中收集重复项[0]
:
Array
(
[a] => b
)
现在您可以从索引中unset
获取这些值:[1]
foreach($diff as $ind=>$uns){
unset($ar[1][$ind]);
}
最后你可以改变 JSON 视图:
foreach($ar as $in=>&$js){
$ar[$in] = json_encode($js);
}
结果将是:
Array
(
[0] => {"a":"b","c":"d","h":"e"}
[1] => {"f":"g"}
)
如果输入元素是对象,则在第一步使用此循环:
foreach($ar as $in=>&$obj){
$ar[$in] = (array)$obj;
}
推荐阅读
- ios - 来电时未完成 VoIP 注册?
- python - Python打印前三行文本
- php - 将数据格式从字符串数组转换为数字
- angular - *ngIf 与 Ionic v5 之间的转换
- php - PHP中的SESSION有限制吗?
- django - Dango admin 在调用 __str__ 方法时抛出空异常
- swift - forceRightToLeft 时 UISwitch 太慢
- jestjs - CRA + Yarn 2 + jsconfig.json = 无法运行单元测试
- python - 使用 psycopg2 更新 JSONB
- java - 使用仅在子类中定义的方法 - JAVA