深度解析PHP数组函数array_combine
前些天写了一篇关于array_merge的函数解析。
今天来看一个新的函数array_combine()
此函数一共有两个参数,一个是合并后数组的键名,另一个为键值。
注意:合并后数组的键名放在第一个参数位上,键值放在第二个参数位上。
两个参数都是不可缺省的。
两个参数数组的元素个数一定要相同否则会报错。
如果其中任意一个参数数组为空同样也会报错。
建议:使用此函数时将两个参数数组均转为一维数组(详见示例7)
实践出真知,让代码跑起来吧~
1.array_combine()的正确打开方式:
1 <?php
2 $key = array('boom' , 'tom' , 'jack');
3 $values = array('12' , 'ok' , '1017');
4 $ret = array_combine($key , $values);
5 print_r($ret);
6
7
8 //run result
9
10 Array
11 (
12 [boom] => 12
13 [tom] => ok
14 [jack] => 1017
15 )
2.如果键名参数数组的元素相同时会是什么情况?
根据下面的例子我们会发现如果出现相同元素时,后一个会覆盖掉前一个的值。
在开发过程中这一点尤为重要,因为它会造成数据结果不完整的情况出现。
<?php
$key = array('boom' , 'tom' , 'tom');
$values = array('12' , 'ok' , '1017');
$ret = array_combine($key , $values);
print_r($ret); //run result
Array
(
[boom] => 12
[tom] => 1017
)
根据上面的例子,我不经的想如果两个参数数组的元素有属于自己的键名会是什么样的情况呢?
3.当第一个参数数组(合并后数组的键名)有自定义键名时
根据下面的记过我们会发现和示例1中的结果一样。
1 <?php
2 $key = array('a' => 'boom' , 'b' => 'tom' , 'c' => 'jack');
3 $values = array('12' , 'ok' , '1017');
4 $ret = array_combine($key , $values);
5 print_r($ret);
6
7 //run result
8
9 Array
10 (
11 [boom] => 12
12 [tom] => ok
13 [jack] => 1017
14 )
4.当第二个参数数组(合并后数组的键值)有自定义键名时
我们发现和之前的情况是一样的。
<?php
$key = array('boom' , 'tom' , 'jack');
$values = array('a' => '12' , 'b' => 'ok' , 'c' => '1017');
$ret = array_combine($key , $values);
print_r($ret); //run result Array
(
[boom] => 12
[tom] => ok
[jack] => 1017
)
5.当两个参数数组都拥有自定义键名时
<?php
$key = array('1' => 'boom' , '2' => 'tom' , '3' => 'jack');
$values = array('a' => '12' , 'b' => 'ok' , 'c' => '1017');
$ret = array_combine($key , $values);
print_r($ret); //run result
Array
(
[boom] => 12
[tom] => ok
[jack] => 1017
)
6.此处我们来考虑一种特殊的情况
当键值参数中的一个元素为数组时会是什么样的情况?
其实也不会有太大的变化
它只是把一维数组变为了二维数组而已
因为这个函数一切的变化只受键值的影响,与键名无关
<?php
$key = array('boom' , 'tom' , 'jack');
$values = array('12' , 'ok' , '1017' => array(1,2,3));
$ret = array_combine($key,$values);
print_r($ret); //run result Array
(
[boom] => 12
[tom] => ok
[jack] => Array
(
[0] => 1
[1] => 2
[2] => 3
) )
7.按照示例6中的情况我们来考虑一下键名参数数组中一个元素为数组时的结果
根据下面的结果我们会发现
它会将这个元素数组视为一个整体进行合并
注意:此处会有一个notice级别的报错
这也就是为什么建议统一转为一维数组来操作的原因
<?php
$key = array('boom' , 'tom' , 'jack' => array(1,2,3));
$values = array('12' , 'ok' , '1017');
$ret = array_combine($key,$values);
print_r($ret); //run result Array
(
[boom] => 12
[tom] => ok
[Array] => 1017
) PHP Notice: Array to string conversion in /usercode/file.php on line 4
综上所述:array_combine()这个函数的结果只受参数数组键值的影响,与键名无关。
再者,如果出现参数数组元素相同时会发生覆盖现象。
使用此函数时,建议参数均转为一维数组。
本文为茴香饺子博客的原创,欢迎转载,转载请注明出处
茴香饺子博客http://www.cnblogs.com/hxjz/
深度解析PHP数组函数array_combine的更多相关文章
- 深度解析PHP数组函数array_slice
看到array_slice()这个函数让我想起了VFP中的range这个范围取值的子句 这个函数一共有四个参数: 被取值的数组(必需) 取值的起始位置(必需) 取值的终止位置,如果不填写默认到数组最后 ...
- 深度解析PHP数组函数array_chunk
array_chunk是PHP中的一个数组分割函数,是将一个数组分割为多个数组块 我们可以把它理解卖豆腐的商人把一整块大豆腐切割为一个一个的小块来进行售卖 这个函数需要三个参数: 被切割的数组(必需) ...
- 深度解析PHP数组函数array_merge
很久之前就用到过这个函数,只不不过是简单的用用而已并没有做太深入的研究 今天在翻阅别人博客时看到了对array_merge的一些使用心得,故此自己来进行一次总结. array_merge是将一个或者多 ...
- php数组函数-array_combine()
array_combine()函数通过合并两个数组来创建一个新数组,其中一个数组是键名,另一个数组的值为键值. 如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false. array ...
- C#解析JSON数组
方式一 第一步:使用前,需下载:Newtonsoft.Json.dll 没有的,请到我百度云盘下载 链接:https://pan.baidu.com/s/1JBkee4qhtW7XOyYFiGOL2Q ...
- 第37课 深度解析QMap与QHash
1. QMap深度解析 (1)QMap是一个以升序键顺序存储键值对的数据结构 ①QMap原型为 class QMap<K, T>模板 ②QMap中的键值对根据Key进行了排序 ③QMap中 ...
- PHP函数积累总结(Math函数、字符串函数、数组函数)
Math函数:10个较常用标红.abs — 绝对值acos — 反余弦acosh — 反双曲余弦asin — 反正弦asinh — 反双曲正弦atan2 — 两个参数的反正切atan — 反正切ata ...
- STL库list::sort()实现深度解析
原创,转载请注明出处:STL库list::sort()实现深度解析 list模板的定义以及一些基本成员函数的实现这里我就不赘述了,还不清楚的同学可以到网上查找相关资料或者直接查看侯捷翻译的<ST ...
- 深度解析javascript中的浅复制和深复制
原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null ...
随机推荐
- QQ_SingleTalkClient
package test_teacher;import java.io.*;import java.net.*;public class SingleTalkClient{ public sta ...
- 图文详解linux如何搭建lamp服务环境
企业网站建设必然离不开服务器运维,一个稳定高效的服务器环境是保证网站正常运行的重要前提.本文小编将会详细讲解Linux系统上如何搭建配置高效的lamp服务环境,并在lamp环境中搭建起企业自己的网站. ...
- angular 自定义filter
用modul.filter .filter("fiilterCity",function(){ return function(obj){ var newObj = []; ang ...
- CSS样式表初学,比C#和JS简单
今天咱们一起来看下CSS样式表的基本基础 经常看博客或者喜欢钻研代码这一类的人对CSS可能有所耳闻,但具体的可能不是很清楚 那什么是CSS呢?与HTML又有什么区别呢?今天咱们就来说道下这个CSS C ...
- [Java自学第二天]
Java封装性思想的初步理解 从项目需求的角度出发,建立各个模块化的类,各个模块暂时不需要具体的方法描述,只需要各个模块的理想到位. 以银行项目为例 初步设想需要三个模块:银行(Bank类).客户(C ...
- A GDI+ Based Character LCD Control
This is a renew. A GDI+ Based Character LCD Control by Conmajia Character liquid crystal display (LC ...
- CF #Manthan, Codefest 16 C. Spy Syndrome 2 Trie
题目链接:http://codeforces.com/problemset/problem/633/C 大意就是给个字典和一个字符串,求一个用字典中的单词恰好构成字符串的匹配. 比赛的时候是用AC自动 ...
- Web 网站服务
Apache 简介 Apache HTTP Server(简称Apache)是开放源码的网页服务器,基于标准的HTTP网站协议提供网页浏览服务,在Web服务器领域中长期保持着超过半数的份额.Apach ...
- smarty的缓冲
首先在main文件夹里面建一个文件 huancun.php 然后在template文件夹里面建一个文件 huancun.html huancun.php中的内容为: require(" ...
- Angularjs快速入门(一)
这系列是看<用angularjs开发下一代web应用>的笔记. angular也接触几个月,总觉得不甚明白,写起来总是不那么如意.希望这本书看完了可以改变现在的状况.好了废话不多说开始: ...