PHP使用key、current和next遍历数组并去重二维数组值

听雨眠
听雨眠
发布时间:2026-10-14 | 4人浏览过
原创

在PHP开发中,经常需要处理复杂的二维数组数据。有时不仅需要去除单个数组内部的重复元素,还要确保不同数组之间不存在相同的值。本文将详细介绍如何巧妙运用 current()、key() 和 next() 这些指针函数,配合逻辑判断,实现对二维数组的全局去重,同时保持原数组的结构不变。

问题描述

假设我们有一个包含多个一维数组的二维数组 $arrq,如下所示:

$arrq = array();
$arrq['tuc'] = array('sss'=>'ewq','shu'=>'sjkah','saa'=>'dwjhaz');
$arrq['tucs'] = array('ssss'=>'ewsq','sQhu'=>'dwjhaz','sa12a'=>'dwjQhaz');
$arrq['tuca'] = array('sssd'=>'ewqq','shu2'=>'sjkah','saSa'=>'dwjhhaz');

我们的目标是:在不破坏原有数组结构的情况下,去除整个 $arrq 数组中所有重复的值。

解决思路

为了实现这一目标,我们需要分两步走:

  1. 内部去重:首先对每一个一维子数组使用 array_unique() 去掉其自身的重复项。
  2. 全局去重:维护一个记录表($last),用于存储之前已经出现过的所有值。在遍历后续的子数组时,检查当前元素的值是否已经存在于记录表中,如果存在则从原数组中移除该元素。

在这个过程中,current() 用于获取当前指针指向的子数组,key() 用于获取当前子数组的键名(如 'tuc'、'tucs'),而 next() 则用于移动数组指针以便进行下一次遍历。

第1步:初始化变量

定义源数组并创建一个空数组 $last 作为历史记录表,用于存放此前已处理过的所有唯一值。

第2步:遍历二维数组

使用 while 循环配合 current() 和 next() 遍历 $arrq。核心代码如下:

<?php
$arrq = array();
$arrq['tuc'] = array('sss'=>'ewq','shu'=>'sjkah','saa'=>'dwjhaz');
$arrq['tucs'] = array('ssss'=>'ewsq','sQhu'=>'dwjhaz','sa12a'=>'dwjQhaz');
$arrq['tuca'] = array('sssd'=>'ewqq','shu2'=>'sjkah','saSa'=>'dwjhhaz');

$last=array(); //设置一个空的用来比较的数组

while($arr=current($arrq)) {
  $tmp=array_unique($arr); //先清除每个一维数组自身相同的值
  
  if(count($last)==0) {
    //如果是第一个数组,直接合并到历史表中
    $last=array_merge($last,$arr);
  }
  else { 
    // 对其余一维数组进行输出和前缀去重
    foreach($arr as $ke=>$va) {
      if(in_array($arr[$ke], $last)) { //如果值已经在前面出现过
        unset($arrq[key($arrq)][$ke]); //删除该元素,注意使用key()获取当前外层键
      }
    }
    //将当前处理后(已去重)的数组内容合并入历史表
    $last=array_merge($last,$arr);
  }
  
  next($arrq); //指针向后移,为下一次循环做准备
}
?>

关键点解析:

  • current($arrq):获取当前索引位置的子数组。
  • key($arrq):获取当前子数组的外层键名(例如 'tucs')。
  • unset($arrq[key($arrq)][$ke]):精准删除外层数组中特定键名下重复的项,从而保持数组结构的完整性。
  • next($arrq):将内部指针前移,确保 while 循环能遍历完所有子数组。

第3步:验证输出结果

处理完成后,我们可以通过双重循环打印出最终的去重效果:

foreach($arrq as $arr) {
  foreach($arr as $val) {
    echo $val." ";
  }
  echo "<br>";
}

运行上述代码后,得到的结果如下图所示:

总结

本例展示了如何组合使用 PHP 数组指针函数与去重逻辑。这种方法的优点在于它不会像直接使用 array_unique($arrq) 那样导致数据结构扁平化或丢失键名信息,而是精细地控制了每一层的处理过程,非常适合需要保留原始关联性的复杂数据处理场景。

以上就是利用PHP的key、current和next联合运用来去除二维数组重复值的详细内容,更多关于PHP多维数组处理的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表