数组合并--php

常用的合并数组方法有以下几种:

1  array_merge

2  ‘+‘

3  array_merge_recursive

下面是一段对比的代码

$array1 = array(2,4,"color" => "red");

    $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);

    $result = array_merge($array1, $array2);

    echo "----------------array_merge---------------".PHP_EOL;

    print_r($result);

    echo "----------------+++++++++++---------------".PHP_EOL;

    print_r($array1+$array2);

    echo "----------------array_merge_recursive---------------".PHP_EOL;

    print_r(array_merge_recursive($array1,$array2));

结果如下所示

----------------array_merge---------------Array(

    [0] => 2

    [1] => 4

    [color] => green

    [2] => a

    [3] => b

    [shape] => trapezoid

    [4] => 4)----------------+++++++++++---------------Array(

    [0] => 2

    [1] => 4

    [color] => red

    [shape] => trapezoid

    [2] => 4)----------------array_merge_recursive---------------Array(

    [0] => 2

    [1] => 4

    [color] => Array

        (

            [0] => red

            [1] => green

        )

    [2] => a

    [3] => b

    [shape] => trapezoid

    [4] => 4)

对比array_merge和+以及array_merge_recursive结果的”color”的值我们可以看出:
1.对于相同的字符串索引,
array_merge则会用后面的值覆盖前面出现的值;
+会用前面出现过的值覆盖后面相同的key;
array_merge_recursive则会把相同的索引放到一个数组里面,增加数组的维度;
2.对于相同的数字索引,
array_merge则会给重复的值重建索引(索引值从0开始);
+仍然是用前面出现过的值覆盖后面的值;
array_merge_recursive和array_merge的处理方法一样。

但是这只是把数组进行合并,我做合并的同时还想要去重应该怎么办呢,那就用到了另外两个函数array_flip()函数array_keys() 函数

要讲到数组合并与去重,这里就不得不提array_flip()函数,而这个函数也是数组键值的翻转函数。

For example:

$arr=array(‘10‘,‘11‘,‘12‘);$arr2=array(‘12‘,‘13‘,‘14‘);$arr3=array(‘14‘,‘15‘,‘16‘);

print_r(array_flip($arr)+array_flip($arr2)+array_flip($arr3));

output:

Array ( [10] => 0 [11] => 1 [12] => 2 [13] => 1 [14] => 2 [15] => 1 [16] => 2 )

1.单数组去重复

array_unique($arrTest)

array_unique() 函数移除数组中的重复的值,并返回结果数组。

当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。

返回的数组中键名不变。

<?php

$a=array("a"=>"red","b"=>"green","c"=>"red");

print_r(array_unique($a));

?>

运行结果:Array ( [a] => red [b] => green )

//2.多数组去重复

array_keys(array_flip($arr1)+array_flip($arr2))

array_keys() 函数返回包含数组中所有键名的一个新数组。

如果提供了第二个参数,则只返回键值为该值的键名。

返回包含数组中所有键名的一个新数组:

<?php

$a=array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");

print_r(array_keys($a));

?>

运行结果:Array ( [a] => red [b] => green )

Array ( [0] => Volvo [1] => BMW [2] => Toyota )

对多个数组合并去重技巧

$a = array(‘1001‘,‘1002‘);

$b = array(‘1002‘,‘1003‘,‘1004‘);

$c = array(‘1003‘,‘1004‘,‘1005‘);

$d = array_keys(array_flip($a) + array_flip($b) + array_flip($c));

结合上边这些函数的分析和使用,相信以后日常对数组合并已经基本不成问题了。

原文地址:https://www.cnblogs.com/wyl0514/p/10850243.html

时间: 2024-10-12 07:32:02

数组合并--php的相关文章

java 有序数组合并

有序数组合并,例如: 数组 A=[100, 89, 88, 67, 65, 34], B=[120, 110, 103, 79, 66, 35, 20] 合并后的结果 result=[120, 110, 103, 100, 89, 88, 79, 67, 66, 65, 35, 34, 20] 程序: import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = {

算法--两个有序数组合并

两个有序数组合并 关键点:从后往前进行比较,这样保证数组A有用的部分不会因为在合并的过程中覆盖掉 第15节 有序数组合并练习题 有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B.请编写一个方法,将B合并入A并排序. 给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组. Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class Merge {

php数组合并

php的array,和java是有很大差距的,虽然php的弱类型的设计可能会被很多java.C++的程序员诟病,但是我觉得在数组容器的设计上,php走的比java和C++都要远. java的容器设计除了不彻底的问题,其允许存在类C++的数组的存在,是java语言本身唯一一处不满足一切皆对象的存在. 实际上容器的存在,本身是要降低一定的效率的,可是如果过分强调效率,为什么不干脆使用机器码呢?所以我不太喜欢那些拿php容器设计走的过分远的观点. 众所周知,php的array本身是map. 对于普通数

PHP中数组合并的两种方法及区别介绍

PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = array( 'where' => 'uid=2', 'order' => 'uid desc', ); 1. array_merge,如果两个数组存在相同的key,后面的一个会覆盖前面的 复制代码代码如下: <?php $c = array_merge($a, $b); var_expo

关于table动态添加数据 单元格合并 数组合并

var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName":"城二分公司","IssueTypeID":101,"IssueTypeName":"宏蜂窝连片弱覆盖","Total":242,"WithoutDemand":139,"

数组合并函数,二维数组相同字段合并到一起。

一般从数据库中提取数据时,会遇到各种各样类型的数据,要求也不尽相同.自己这两天开发的时候遇到一个很纠结的问题,如下: 比如一个二维数组是这样的: Array ( [0] => Array ( [uid] => 231 [username] => 123456 [active] =>aaaa [transfer] =>1111 ) [1] => Array ( [uid] => 231 [username] =>123456 [active] => bb

论php数组合并

注:尽量不要在循环中操作数据库. 1.两个一维数组合并成一个一维数组 $a = array('morning','afternoon','night'); $b = array('breakfast','lunch','dinner'); (1)以$a中的数组元素为键名,以$b中的数组元素为键值而形成的一个新数组. $c = array_combine($a,$b); (2)将$a中与$b中键值相同的数组元素剔除,仅保留$a中不同的数组元素.也就是说返回差集. $c=array_diff($a,

go语言:多个[]byte数组合并成一个[]byte

场景:在开发中,要将多个[]byte数组合并成一个[]byte,初步实现思路如下: 1.获取多个[]byte长度 2.构造一个二维码数组 3.循环将[]byte拷贝到二维数组中 package gstore import ( "bytes" ) //BytesCombine 多个[]byte数组合并成一个[]byte func BytesCombine(pBytes ...[]byte) []byte { len := len(pBytes) s := make([][]byte, l

将一个二维数组合并成一个一维数组

大家都知道php有内置的数组合并函数array_merage($arr,$arr1,$arr2,$arr3);那如何把一个二维数组如array(array('a'=>1,'b'=>2),array('c'=>3,'d'=>4)) 合并成如下的数组 array('a'=>1,'b'=>2,'c'=>3,'d'=>4);似乎,php目前还没有这样的内置函数吧,于是自己动手写了两种方法,仅供大家参考 第一种.方法当然是递归法呢,代码如下 <?php $new

【C练习】两个已经从小到大的数组合并成为一个从小到大排序的数组

两个已经从小到大的数组合并成为一个从小到大排序的数组 1 #include<stdio.h> 2 int main() 3 { 4 int m,n,i,j,k,tem=0; 5 printf("这两个数组分别有多少个数:\n"); 6 scanf("%d%d",&m,&n); 7 int a[m],b[n],c[m+n]; 8 printf("从小到大输入%d个数:\n",m); 9 for(i=0;i<m;i+