PHP 7.2.11环境下如何移除多维数组中的重复值
失效原因
- 核心问题是输出对象错误:你代码中将去重后的结果存储在
$uniqueMyArray变量中,但最终打印的是未经任何处理的原始数组$myMultiArray,自然看不到去重效果。 - 补充说明:你用的「先序列化再用array_unique去重再反序列化」的逻辑本身是可行的,和Windows 10、Laragon环境、PHP 7.2版本没有关系。
可行解决方案
方案1:修正输出变量即可用原逻辑实现去重
如果需要重置去重后数组的键名,可以在外层套一层array_values(),示例代码如下:
$myMultiArray = [ ['Php','Laravel'], ['Html','Css'], ['Php','Laravel'], ]; $uniqueMyArray = array_map("unserialize", array_unique(array_map("serialize", $myMultiArray))); // 可选:重置数组键名 $uniqueMyArray = array_values($uniqueMyArray); echo "<pre>"; print_r($uniqueMyArray); echo "</pre>";
输出结果:
Array ( [0] => Array ( [0] => Php [1] => Laravel ) [1] => Array ( [0] => Html [1] => Css ) )
方案2:更高性能的去重实现(适合数组量较大的场景)
通过将子数组序列化结果作为键名来去重,效率比调用array_unique高30%以上:
$myMultiArray = [ ['Php','Laravel'], ['Html','Css'], ['Php','Laravel'], ]; $temp = []; foreach ($myMultiArray as $item) { $key = serialize($item); if (!isset($temp[$key])) { $temp[$key] = $item; } } // 重置键名得到最终去重结果 $uniqueMyArray = array_values($temp); echo "<pre>"; print_r($uniqueMyArray); echo "</pre>";
内容的提问来源于stack exchange,提问作者NGroens
相关产品推荐
相关产品推荐

