php - 如何从多维数组中删除php中特定键的重复值
问题描述
我在这里搜索了解决方案,但没有找到适合我用例的解决方案。
我有一个array
像这个例子一样构建的大的:
Array
(
[0] => Array
(
[Template] => page.html5
)
[1] => Array
(
[Template] => page2.html5
)
[2] => Array
(
[Template] => page.html5
)
[3] => Array
(
[Template] => page2.html5
)
[4] => Array
(
[Template] => page.html5
)
[5] => Array
(
[Template] => page2.html5
)
[6] => Array
(
[id] => 27
[table] => tl_custom
[type] => text
[data] => Array
(
[fragment] => example
[previewId] => 1
[isActive] => 1
)
)
)
我想删除array
键“模板”的所有重复值,但除此之外我希望array
保持原样。
所以之后我的数组应该是这样的:
Array
(
[0] => Array
(
[Template] => page.html5
)
[1] => Array
(
[Template] => page2.html5
)
[6] => Array
(
[id] => 27
[table] => tl_custom
[type] => text
[data] => Array
(
[fragment] => example
[previewId] => 1
[isActive] => 1
)
)
)
有没有办法在不使用大量内存的情况下实现这一目标?感谢您的回答:)
解决方案
您可以使用以下逻辑,该逻辑使用:
array_map()
用索引键值展平数组,并serialize()
(字符串化)最后一个数组元素,以便我们可以
array_unique()
在结果上使用。
然后,为了恢复字符串化的数组,即将它变成一个数组,我们使用unserialize()
.
<?php
$newArr = array_unique(array_map(function ($el) {
return $el['Template'] ?? serialize($el);
}, $arr));
// restore the last element to array
$last = array_key_last($newArr); // (PHP 7 >= 7.3.0)*
$newArr[$last] = unserialize($newArr[$last]);
*如果 PHP 版本 <7.3.0 使用:end($newArr); $last = key($newArr);
输出:
Array
(
[0] => page.html5
[1] => page2.html5
[6] => Array
(
[id] => 27
[table] => tl_custom
[type] => text
[data] => Array
(
[fragment] => example
[previewId] => 1
[isActive] => 1
)
)
)
工作演示
推荐阅读
- wolfram-mathematica - 为什么有限和计算得这么长?
- c++ - 子类按钮 WinApi
- javascript - 如何在javascript(节点)中的2个页面之间传输变量
- html - 用户滚动时CSS停止旋转元素
- machine-learning - Lightgbm(或其他具有二阶损失近似值的增强树实现)如何处理 L1 损失?
- java - JUNIT5 中的 AssertThrows
- php - wordpress 中的出队功能不起作用
- c - malloc 在向二叉搜索树插入值时如何分配空间?
- c# - url中带有扩展名的文件名作为参数
- javascript - 如何删除html画布中不需要的行?