数组判重并更新重复值

一维数组:

$arr = [1,2,3,4,5,4,3,2,1,1,1,1];
updateRepeat($arr);

处理结果:

array(12) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> string(4) "4(1)" [6]=> string(4) "3(1)" [7]=> string(4) "2(1)" [8]=> string(4) "1(1)" [9]=> string(4) "1(2)" [10]=> string(4) "1(3)" [11]=> string(4) "1(4)" }

二维数组:

   $arr = [
            [‘name‘ =>‘233‘,‘sex‘ => 1],
            [‘name‘ =>‘456‘],
            [‘name‘ =>‘hahaha‘],
            [‘name‘ =>‘qwe‘],
            [‘name‘ =>‘965‘],
            [‘name‘ =>‘2333‘],
            [‘name‘ =>‘233‘,‘num‘ => 2],
            [‘name‘ =>‘hahaha‘],
            [‘name‘ =>‘233‘,‘sex‘ => 1],
            [‘name‘ =>‘233‘,‘sex‘ => 1],
            [‘name‘ =>‘233‘,‘sex‘ => 1],
            [‘name‘ =>‘233‘,‘sex‘ => 1]
     ];    updateRepeat($arr,‘name‘);

处理结果:

array(12) { [0]=> array(2) { ["name"]=> string(3) "233" ["sex"]=> int(1) } [1]=> array(1) { ["name"]=> string(3) "456" } [2]=> array(1) { ["name"]=> string(6) "hahaha" } [3]=> array(1) { ["name"]=> string(3) "qwe" } [4]=> array(1) { ["name"]=> string(3) "965" } [5]=> array(1) { ["name"]=> string(4) "2333" } [6]=> array(2) { ["name"]=> string(6) "233(1)" ["num"]=> int(2) } [7]=> array(1) { ["name"]=> string(9) "hahaha(1)" } [8]=> array(2) { ["name"]=> string(6) "233(2)" ["sex"]=> int(1) } [9]=> array(2) { ["name"]=> string(6) "233(3)" ["sex"]=> int(1) } [10]=> array(2) { ["name"]=> string(6) "233(4)" ["sex"]=> int(1) } [11]=> array(2) { ["name"]=> string(6) "233(5)" ["sex"]=> int(1) } }

代码:

    //二维数组指定字段,更改重复的值
    public function updateRepeat($arr,$field)
    {
        $newarr = array();
        foreach($arr as $k => $v)
        {
            if(in_array($v[$field], $newarr))
            {
                $newvalue = $this->updateField($newarr,$v[$field],$v[$field]);
                //将重复的值修改后的值更新到原数组
                $arr[$k][$field] = $newvalue;
                //将重复的值修改后的值放入判重数组
                $newarr[$k] = $newvalue;
            } else {
                //将不重复的值放入判重数组
                $newarr[$k] = $v[$field];
            }
        }
        return $arr;
    }

    //一维数组更改重复的值
    public function updateRepeat1($arr)
    {
        $newarr = array();
        foreach($arr as $k => $v)
        {
            if(in_array($v, $newarr))
            {
                $newvalue = $this->updateField($newarr,$v,$v);
                //将重复的值修改后的值更新到原数组
                $arr[$k] = $newvalue;
                //将重复的值修改后的值放入判重数组
                $newarr[$k] = $newvalue;
            } else {
                //将不重复的值放入判重数组
                $newarr[$k] = $v;
            }
        }
        return $arr;
    }
    //处理重复值
    public function updateField($arr,$oldv,$newv,$num = 1)
    {
        //为了实现递归所以重新判重
        if(in_array($newv, $arr, true))
        {
            $newvalue = $oldv.‘(‘.$num.‘)‘;
            $newnum = $num + 1;
            $res = $this->updateField($arr,$oldv,$newvalue,$newnum);
        } else {
            return $newv;
        }
        return $res;
    }

一个简单的数组判重,原理是将数组遍历,依次取出值,每取到一个值就和之前取到的值的集合进行匹配,如果有重复了就更新值。

注意in_array()第三个参数,默认false使用的 == 匹配,true使用 === 匹配,如果不使用严格匹配,值为整型时会判断错误。

原文地址:https://www.cnblogs.com/yuanshen/p/12082994.html

时间: 2024-10-17 16:55:47

数组判重并更新重复值的相关文章

北京网络赛G BOXES 状态压缩+有序BFS+高维数组判重

#include <bits/stdc++.h> using namespace std; int vis1[7]; int vis2[7][7]; int vis3[7][7][7]; int vis4[7][7][7][7]; int vis5[7][7][7][7][7]; int vis6[7][7][7][7][7][7]; int vis7[7][7][7][7][7][7][7]; struct node{ int a[7]; int step; }; bool check(in

PHP如何去掉多维数组的重复值

1.定义函数 function array_unique_new($arr){ $t = array_map('serialize', $arr);//利用serialize()方法将数组转换为以字符串形式的一维数组 $t = array_unique($t);//去掉重复值 $new_arr = array_map('unserialize', $t);//然后将刚组建的一维数组转回为php值 return $new_arr; } 2.定义数组 $arr = array(array('sup_

算法--判断数组中是否有重复值

判断数组中是否有重复值 第14节 重复值判断练习题 请设计一个高效算法,判断数组中是否有重复值.必须保证额外空间复杂度为O(1). 给定一个int数组A及它的大小n,请返回它是否有重复值. 测试样例: [1,2,3,4,5,5,6],7 返回:true Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class Checker { 4 public boolean checkDuplicate(int[] a, int n) {

js 数组排除重复值(string)

前提:数组中的元素类型为:string 在网上看了许多高大尚的文章,还是解决不了我的string arry 的问题,只能怪自己脑残了,上代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

PHP去掉数组重复值二种方法实例

PHP两种去掉数组重复值的方法,分别使用foreach方法和array_unique方法. 去除一个数组中的重复值,可以使用foreach方法,也可以使用array_unique方法. <?php $arrF = array(); $arrS = array(); $intTotal = 100; $intRand = 10; for($i=0; $i < $intTotal; $i++) { $arrF[] = rand(1, $intRand); $arrS[] = rand(1, $in

js去除数组中的重复值

hasOwnProperty(property) 方法 JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性. 使用方法: object.hasOwnProperty(proName) 其中参数object是必选项.一个对象的实例.proName是必选项.一个属性名称的字符串值. 如果 object 具有指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true:反之则返回 false.此方法无法检查该对

计算一个数组里的重复值并且删去(java)

主要思想: 假设数字里的值都为正 循环判断数组 如果与前面的数字相同则变为-1 然后记录-1的个数算出重复值 然后重新new一个减去重复值长度的新数组 和原数组判断 不为-1的全部复制进来即可 代码如下: 1 package Del_Same_Num; 2 3 public class Del_Same_Num { 4 5 static int count=0; 6 7 //计算重复值 8 public static int count_same_number(int[] a) 9 { 10 f

JavaScript去除数组中的重复值

用原型函数(prototype)可以定义一些很方便的自定义函数,实现各种自定义功能. Javascript 中的原型函数(prototype)的工作原理,在 javascript 中每次声明新函数的过程中,就会为其创建一个 prototype 的属性.在未加其他附带条件情况下,所有的 prototype 属性都会自动获取 constractor 属性,constructor 内包含一个指向 prototype 属性所属函数的指针(就是说 constructor 回指构造函数本身).静乐县隗承五金

php 检查该数组有重复值

if (count($array) != count(array_unique($array))) { echo '该数组有重复值'; }