站三界导航
首页 TP代码tp5常用公共方法-二维数组去重(支持多字段同时匹配去重)

tp5常用公共方法-二维数组去重(支持多字段同时匹配去重)

  • TP代码
  • 来源:站三界导航
  • 62阅读
  • 2022-09-09

function moreArrayUnique($arr, $field = [], $allField = true)
{
    //必须是传入数组
    if (!is_array($field)) return false;

    //先把二维数组中的内层数组的键值记录在在一维数组中
    foreach ($arr[0] as $k => $v) $allField[] = $k;
    if ($field) {
        //按照顺序排字段名
        foreach ($allField as $key => $val) {
            if (!in_array($val, $field)) unset($allField[$key]);
        }
        $field = $allField;
    }

    foreach ($arr as $k => $v) {
        foreach ($v as $key => $item) {
            if (!in_array($key, $field)) unset($v[$key]);
        }
        //降维 用implode()也行
        $v = implode(",", $v);
        //保留原来的键值 $temp[]即为不保留原来键值
        $temp[$k] = $v;
    }

    //去重:去掉重复的元素
    $arr = array_unique($temp);
    if ($allField) {
        foreach ($arr as $k => $v) {
            //拆分后的重组 如:Array( [0] => 张三 [1] => 18 )
            $a = explode(",", $v);
            //将原来的键与值重新合并
            $arrAfter[] = array_combine($field, $a);
        }

    } else {
        //将键值保存为一维数组
        $allKey = array_keys($temp);
        $arrAfter = [];
        foreach ($arr as $k => $v) {
            //数组去重
            if (!in_array($k, $allKey)) {
                unset($arr[$k]);
            } else {
                $a = explode(",", $v);
                $arrAfter[] = array_combine($field, $a);
            }
        }
    }

    return $arrAfter ?? false;
}

本文结束
本文来自投稿,不代表站三界导航立场,如若转载,请注明出处:https://www.zhansanjie.com/article/details/10171.html

版权声明:

1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

2、本站仅提供信息发布平台,不承担相关法律责任。

3、若侵犯您的版权或隐私,请联系本站管理员删除。

4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。

分享
站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。