PHP array_flip() array_merge() array+array的使用总结
array_flip(array);
//传递一个数组参数,对该数组的键、值进行翻转
例如:
$a = array(
'a',
'b',
'c'
);
print_r(array_flip($a)); //输出为:
Array
(
[a] => 0
[b] => 1
[c] => 2
) //需要注意的是: array_flip(): Can only flip STRING and INTEGER values
array_merge (array1,array2[,aray3...])
//对两个或多个数组进行合并(传递一个数组参数也是可以的)
需要注意的是:
- 如果数组中没有键名,则不管他们的值的交集存不存在重复,最终结果都会以下标为0开始的数组返回,值的顺序依次为array1、array2..
- 如果数组中设置有键名,且键名存在重复,则该键值为最后一个键名对应的值(覆盖前面)
- 如果数组是指定数字索引,则结果的键名会以从0开始的数组重新进行索引
- 如果数组中的键名存在以上的组合情况,则以显式指定键名的优先
- 总结一点是,他要保证合并后的数组索引不能重复,若没指定键名或指定键名为数字,则结果按从0开始的数字重新进行,若指定了非数字索引,则他会保留之前的索引,但如果存在多个,则只保留最后一个
几个例子:
//没有指定索引
$a = array(
'a',
'b',
);
$b = array(
'a',
'b',
);
$arr = array_merge($a,$b);
//输出:
Array
(
[0] => a
[1] => b
[2] => a
[3] => b
)
//=======================
//显式指定数字键名
$a = array(
3=>'a',
4=>'b',
);
$b = array(
1=>'a',
2=>'b',
);
$arr = array_merge($a,$b);
//输出:
Array
(
[0] => a
[1] => b
[2] => a
[3] => b
)
//=======================
//显式指定数字键名和无索引混合
$a = array(
3=>'a',
'b',
);
$b = array(
'a',
2=>'b',
);
$arr = array_merge($a,$b);
//输出:
Array
(
[0] => a
[1] => b
[2] => a
[3] => b
)
//=======================
//显式指定非数字索引1
$a = array(
'a'=>1,
'b',
);
$b = array(
'a',
'b',
);
$arr = array_merge($a,$b);
//输出:
Array
(
[a] => 1
[0] => b
[1] => a
[2] => b
)
//=======================
//显式指定非数字索引2
$a = array(
'a'=>1,
'b'=>2,
);
$b = array(
'a',
'b'=>22,
);
$arr = array_merge($a,$b);
//输出:
Array
(
[a] => 1
[b] => 22
[0] => a
)
其他的几种组合例子就不贴上去了……
array1+array2
这种写法其实没用过,研究了一把,他其实也是用来合并数组操作。用法和array_merge有一定的区别。
- 若数组没有指定索引,则他会先把array1的先赋值给结果,假设array1长度为3,array2长度为5,则他会把array2[3]、array2[4]追加到结果后面,array2[0-2]直接忽略
- 若为数组指定了索引,不管为数字还是非数字索引,最终结果都会保留指定的索引,若两个数组存在重复的索引,则以第一个为最终结果(覆盖后面)
- 指定索引和无索引混合的情况下,先看array1,若前几个为无索引,比如前3个没有指定,则还按照规则1,忽略掉array2中的前3个。若array1[0]为显式指定索引,则不会忽略array2中的数组元素,除非存在指定相同的索引,遵循规则2
几个例子:
//没有指定索引
$a = array(
'a',
'b',
);
$b = array(
'c',
'd',
'e'
);
$arr = $a + $b;
//输出:
Array
(
[0] => a
[1] => b
[2] => e
)
//=======================
//指定数字索引
$a = array(
1=>'a',
2=>'b',
);
$b = array(
4=>'c',
7=>'d'
);
$arr = $a + $b;
//输出:
Array
(
[1] => a
[2] => b
[4] => c
[7] => d
)
//=======================
//指定索引,存在重复
$a = array(
'a'=>11,
'b'=>22,
);
$b = array(
'c'=>33,
'd'=>44,
'a'=>55
);
$arr = $a + $b;
//输出:
Array
(
[a] => 11
[b] => 22
[c] => 33
[d] => 44
)
//=======================
//混合指定索引和无索引1
$a = array(
'a',
2=>'b',
);
$b = array(
'c',
'd',
10=>'a',
4=>22
);
$arr = $a + $b;
//输出:
Array
(
[0] => a
[2] => b
[1] => d
[10] => a
[4] => 22
)
//=======================
//混合指定索引和无索引2
$a = array(
2=>'b',
'a',
);
$b = array(
'c',
'd',
10=>'a',
4=>22
);
$arr = $a + $b;
//输出:
Array
(
[2] => b
[3] => a
[0] => c
[1] => d
[10] => a
[4] => 22
)
array_flip和array+array的搭配使用(去掉两个数组中重复的值):
$a = array(
'a',
'b',
'c'
);
$b = array(
'a1',
'b1',
'c'
);
$arr = array_flip($a) + array_flip($b);
print_r(array_keys($arr));
//输出:
Array
(
[0] => a
[1] => b
[2] => c
[3] => a1
[4] => b1
)
PHP array_flip() array_merge() array+array的使用总结的更多相关文章
- array_flip() array_merge() array+array的使用总结
array_flip(array); //传递一个数组参数,对该数组的键.值进行翻转 例如: $a = array( 'a', 'b', 'c' ); print_r(array_flip($a)); ...
- PHP中array_merge和array相加的区别分析
今天处理一个这样的问题:如何获取字符键名相同值不同的两个数组值集合,用array_merge和数组相加都不可行,让我认真比较了下PHP中array_merge和array相加的区别 首先来看看键名是s ...
- PHP中array_merge函数与array+array的区别
在PHP中可以使用array_merge函数和两个数组相加array+array的方式进行数组合并,但两者效果并不相同,下面为大家介绍两者具体的使用区别. 区别如下: 当下标为数值时,array_me ...
- array_merge和array+的区别分析
记得之前发现很多朋友用过array+array的方式,今天索性再聊下这样的话题:如何获取字符键名相同值不同的两个数组值集合?让我认真比较了下PHP中array_merge和array相加的区别 首先来 ...
- PHP中array_merge和array+array的区别
在PHP中可以使用array_merge函数和两个数组相加array+array的方式进行数组合并,但两者效果并不相同,区别如下: 当下标为数值时,array_merge()不会覆盖掉原来的值,但ar ...
- php 通过array_merge()和array+array合并数组的区别和效率比较
众所周知合并两个数组可以使用array_merge(),这是php提供的一个函数.另外还可以通过 array 的方式来合并数组,这两种直接有什么区别,哪一个的效率更高呢? array_merge() ...
- hdu 6197 array array array
array array array Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++>
LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++> 给出排序好的 ...
- array_merge与array+array的区别
结果:
随机推荐
- BZOJ AC 300祭!
- [Re:从零开始的分布式] 0.x——分布式基础概念
分布式的特点 1. 分布式 2. 对等性 3. 并发性 4. 缺乏全局时钟 5. 故障总是会发生 分布式环境的问题 1. 网络不可靠 2. 网络分区 3. 节点故障 CAP理论 一致性 可用性 分区容 ...
- Mac下使Iterm2开机启动不显示界面
一.在登录项上添加Iterm2的启动项 二.打开Iterm2 1.启动后会显示Iterm2,此时点击关闭按钮,保证桌面上没有任何的控制台窗口. 2.按[Command]+[Shift]+[S],保存名 ...
- Mac下的SSH插件(默认自带)
Mac下默认自带,直接通过终端输入ssh获取更多的参数帮助.
- (转)分布式中使用Redis实现Session共享(一)
上一篇介绍了如何使用nginx+iis部署一个简单的分布式系统,文章结尾留下了几个问题,其中一个是"如何解决多站点下Session共享".这篇文章将会介绍如何使用Redis,下一篇 ...
- WCF系列教程之WCF客户端调用服务
1.创建WCF客户端应用程序需要执行下列步骤 (1).获取服务终结点的服务协定.绑定以及地址信息 (2).使用该信息创建WCF客户端 (3).调用操作 (4).关闭WCF客户端对象 二.操作实例 1. ...
- Java源码安全审查
最近业务需要出一份Java Web应用源码安全审查报告, 对比了市面上数种工具及其分析结果, 基于结果总结了一份规则库. 本文目录结构如下: 检测工具 FindSecurityBugs 基于class ...
- JavaScript设计模式-9.工厂模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Algorithm partI 第2节课 Union−Find
发展一个有效算法的具体(一般)过程: union-find用来解决dynamic connectivity,下面主要讲quick find和quick union及其应用和改进. 基本操作:find/ ...
- 图像RGB2YUV与YUV2RGB格式互转介绍
1 YUV格式与RGB格式说明 由于不同国家的电视信号系统支持的图像格式不同,有YUV格式成像,也有RGB格式成像,因此为了保证兼容性,需要进行RGB与YUV格式的互转. 另外YUV格式具有亮度信息和 ...