当前位置:首页 » 编程语言 » php合并数组去重

php合并数组去重

发布时间: 2022-05-31 19:13:22

❶ 数组去重的5种方法

数组去重的5种方法:

方法一:

双重for循环去重

原理 两两比较如果相等的话就删除第二个

例如: 1 1 1 3 2 1 2 4

先让第一个1 即arr[0]与后面的一个个比较 如果后面的值等于arr[0] 删除后面的值

第一次结束后的结果是 1 3 2 2 4 删除了后面所有的1

同理 第二次 第三会删除与自己相同的元素

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

function noRepeat1(arr){

// 第一层for用来控制循环的次数

for(var i=0; i<arr.length; i++){

//第二层for 用于控制与第一层比较的元素

for(var j=i+1; j<arr.length; j++){

//如果相等

if(arr[i] == arr[j]){

//删除后面的 即第 j个位置上的元素 删除个数 1 个

arr.splice(j,1);

// j--很关键的一步 如果删除 程序就会出错

//j--的原因是 每次使用splice删除元素时 返回的是一个新的数组

// 这意味这数组下次遍历是 比较市跳过了一个元素

/*

例如: 第一次删除后 返回的是 1 1 3 2 1 2 4

* 但是第二次遍历是 j的值为2 arr[2] = 3

* 相当于跳过一个元素 因此要 j--

* */

j--;

}

}

}

return arr;

}

方法二:

单层for循环

原理和方法一相似

1

2

3

4

5

6

7

8

9

10

11

12

13

function norepeat(arr){

arr.sort();

//先排序让大概相同的在一个位置,这里为什么说是大概相同 是因为sort排序是把元素当字符串排序的 它和可能排成 1 1 10 11 2 20 3 ... 不是我们想要的从小到大

for(var i = 0; i < arr.length-1;i++){

//还是两两比较 一样删除后面的

if(arr[i]==arr[i+1]){

arr.splice(i,1);

//i-- 和j--同理

i--;

}

}

return arr;

}

方法三:

原理:用一个空数组去存首次出现的元素
利用 indexOf 属性 indexOf是返回某个指定的字符在字符串中出现的位置,如果没有就会返回-1
因此我们可以很好的利用这个属性 当返回的是 -1时 就让其存入数组

1

2

3

4

5

6

7

8

9

function noRepeat2(arr){

var newArr = [];

for(var i = 0; i < arr.length; i++){

if(newArr.indexOf(arr[i]) == -1){

newArr.push(arr[i]);

}

}

return newArr;

}

方法四:

原理:利用对象的思想,如果对象里没有这个属性的话就会返回undefined
利用这个原理当返回的是undefined时让其放入数组然后在给这个属性赋值

1

2

3

4

5

6

7

8

9

10

11

function norepeat3(arr) {

var obj = {};

var newArr = [];

for(var i = 0; i < arr.length; i++) {

if(obj[arr[i]] == undefined) {

newArr.push(arr[i]);

obj[arr[i]] = 1;

}

}

return newArr;

}

方法五:

原理:循环比较如果相等的让后面的元素值为0,最后在输出的时候删除为0的这个前提是你的数据里不能有0,但是凡事可以变通你可以设置任何值替代这个0,这个方法是我当时想到实现的所以没有进行很好的优化。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

var newArr = [];

//控制外循环

for(var i=0; i<arr.length-1;i++){

//内存循环 只比较后面的

for(j=i+1;j<arr.length;j++){

//如果相等就让其值等于0

if(arr[i]==arr[j]){

arr[j]=0;

}

}

//去除值为0的

if(arr[i]==0){

continue;

}else{

//放入新的数组

newArr.push(arr[i]);

}

}

推荐教程:《php视频教程》

以上就是数组去重的5种方法有哪些?的详细内容,更多请关注php中文网其它相关文章!

❷ php数组去除重复的值

之前写了一篇关于数组去重的文章,但是仅限于一维数组。下面的函数可以用于二维数组:
//二维数组去掉重复值
function array_unique_fb($array2D){foreach ($array2D as $v){$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){$temp[$k] = explode(",",$v); //再将拆开的数组重新组装}return $temp;}
如果你想保留数组的键值,可以用下面的函数:
//二维数组去掉重复值 并保留键值
function array_unique_fb($array2D){foreach ($array2D as $k=>$v){$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[$k] = $v;}$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){$array=explode(",",$v); //再将拆开的数组重新组装
$temp2[$k]["id"] =$array[0];
$temp2[$k]["litpic"] =$array[1];
$temp2[$k]["title"] =$array[2];
$temp2[$k]["address"] =$array[3];
$temp2[$k]["starttime"] =$array[4];
$temp2[$k]["endtime"] =$array[5];
$temp2[$k]["classid"] =$array[6];
大概就这样啦。
以上回答你满意么?

❸ PHP合并数组几种方式总结

PHP 中的 array_merge()、array_merge_recursive()函数可以实现

array_merge() 函数把两个或多个数组合并为一个数组。

如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。

注意:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。

array_merge(array1,array2,array3...)

参数说明
array1 必需。输入的第一个数组。
array2 必需。输入的第二个数组。
array3 可选。可指定的多个输入数组。

例如:
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));
?>

输出:

Array ( [a] => Horse [b] => Cat [c] => Cow )

仅使用一个数组参数:

<?php
$a=array(3=>"Horse",4=>"Dog");
print_r(array_merge($a));
?>

输出:

Array ( [0] => Horse [1] => Dog )

array_merge_recursive() 函数与array_merge()函数不同的是,当有重复的键名时,值不会被覆盖,而是将多个相同键名的值递归组成一个数组。

例如:
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge_recursive($a1,$a2));
?>

输出:

Array (
[a] => Horse
[b] => Array ( [0] => Dog [1] => Cat )
[c] => Cow
)

❹ php 多个一维关联数组去重

因为不太了解你其他业务,这里通过对多个数组观察发现,他们的键名都是一致的。所以有2个简单的办法

(1)先翻转一维数组,然后进行合并,再翻转回来

这里就不写详细代码,写下简单过程

  1. $array_a =array_flip($array_a);

    这样交换后的数组内容如下

    Array
    (
    [DHL] =>carrier
    )

    Array
    (
    [HKPT] =>carrier
    )

    ....

  2. 合并数组,使用array_merge,数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值

    $mergeArray = array_merge($array_a,$array_b,$array_c...);

    这样得到一个数组,里面的元素都是键名不重复的,内容如下

    Array

    (

    [DHL] =>carrier

    [HKPT] =>carrier

    ....

    )

  3. 还原数组,这里如果要完全打散成一个一个的一维数组,就直接array_shift,同时翻转回来

    $array_a =array_shift($mergeArray);$array_a =array_flip($array_a);

    $array_b =array_shift($mergeArray);$array_b=array_flip($array_b);

    ...

    这里一个一个执行可以用for循环替代,数组中有多少个元素就执行多少次,




(2)最简单的办法,只从你提供的例子来说,键名都一样,直接先去掉键名,然后组合成一个数字索引的数组,直接array-unique,再把键名放回去


如果有不清楚可以发消息

❺ PHP二维数组如何实现去除重复项

PHP数组去除重复项有个内置函数array_unique(),但是php的array_unique函数只适用于一维数组,对多维数组并不适用,不过你可以在二维数组中的值,用array_unique()即可。

比如:

$array = array(array(1,1,2),array(2,3,4,3));

$temp_array = array();
foreach($array as $key=>$value){

$temp_array[$key] = array_unique($value);
}

$array = $temp_array;

❻ 【php】合并多个数组并去掉相同的

你是要把$tpid数组的内容合并吗,可以先弄了一个空数组,for里面归并到这个空数组,for结束之后进行唯一处理,大致逻辑如下:
<?php
$result=Array();
for($i=0;$i<$num;$i++){
$tpid=$data[$i]['busitype'];
$tpid=explode(".",$tpid,-1);
print_r($tpid);
echo
"<br>";
$result=array_merge($result,$tpid);
}
$result=array_unique($result);
?>
补充:
那是array_merge的问题,重复的下标会被合并,你试试看使用array_merge_recursive吧,我无法测试程序,没有你的数据。

❼ php数组怎么去除重复的数组值

array_unique() 函数定义和用法
移除数组中的重复的值,并返回结果数组。
当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。
返回的数组中键名不变。
<?php
$a=array("a"=>"XX","b"=>"D","c"=>"XX");
print_r(array_unique($a));
?>
输出:Array ( [a] => XX [b] => D)

❽ php里面如何合并数组

可以使用函数array_merge();

❾ php 大数组合并去重 两个数组元素都过万

过万没关系,如果一个数组内容占一个机器字长,1万才10K WORD而已,现在机器内存很大,几千万都瞬间就处理完了,完全可以按照一般方法编程

一般方法的合并数组,要看小标是0、1、2、....还是其它的关键字,相同下标的合并还是相同值的合并,具体细节有区别,流程都是一样的:两次for each把两个数组的内容添加到新数组里面。

❿ 关于php 数组合并去重问题

你的数组源一看就不是php数组!! 转化后的结构也不是php数组。
php数据结构是 array(key => value); 而且在php数组中,如果有重复的key,则value值会覆盖之前的数据。

热点内容
安卓沼泽激战哪里下载 发布:2025-02-10 23:45:03 浏览:260
网站服务器如何连接光纤 发布:2025-02-10 23:42:29 浏览:729
组合键脚本 发布:2025-02-10 23:32:43 浏览:552
安卓篮球手游在哪里下 发布:2025-02-10 23:21:55 浏览:133
linux改变所有者 发布:2025-02-10 23:04:13 浏览:650
源码曹毅 发布:2025-02-10 23:04:01 浏览:582
odbcforsqlserver 发布:2025-02-10 22:26:37 浏览:600
区块链数据存储在那里 发布:2025-02-10 22:25:48 浏览:689
c语言for死循环 发布:2025-02-10 22:24:08 浏览:523
苹果限制访问初始密码 发布:2025-02-10 22:21:31 浏览:759