前些天写了一篇关于array_merge的函数解析。

今天来看一个新的函数array_combine()

此函数一共有两个参数,一个是合并后数组的键名,另一个为键值。

注意:合并后数组的键名放在第一个参数位上,键值放在第二个参数位上。

   两个参数都是不可缺省的。

   两个参数数组的元素个数一定要相同否则会报错。

   如果其中任意一个参数数组为空同样也会报错。

   建议:使用此函数时将两个参数数组均转为一维数组(详见示例7)

实践出真知,让代码跑起来吧~

1.array_combine()的正确打开方式:

 1 <?php2 $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 result9
10 Array
11 (
12     [boom] => 12
13     [tom] => ok
14     [jack] => 1017
15 )

2.如果键名参数数组的元素相同时会是什么情况?

  根据下面的例子我们会发现如果出现相同元素时,后一个会覆盖掉前一个的值。

  在开发过程中这一点尤为重要,因为它会造成数据结果不完整的情况出现。

 1 <?php
 2 $key = array('boom' , 'tom' , 'tom');
 3 $values = array('12' , 'ok' , '1017');
 4 $ret = array_combine($key , $values);
 5 print_r($ret);
 6
 7
 8 //run result
 9 Array
10 (
11     [boom] => 12
12     [tom] => 1017
13 )

根据上面的例子,我不经的想如果两个参数数组的元素有属于自己的键名会是什么样的情况呢?

3.当第一个参数数组(合并后数组的键名)有自定义键名时

 根据下面的记过我们会发现和示例1中的结果一样。

 1 <?php2 $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 result8 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 resultArray
([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 resultArray
([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 resultArray
([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/

转载于:https://www.cnblogs.com/hxjz/p/6919392.html

深度解析PHP数组函数array_combine相关推荐

  1. 深度解析PHP数组函数array_chunk

    array_chunk是PHP中的一个数组分割函数,是将一个数组分割为多个数组块 我们可以把它理解卖豆腐的商人把一整块大豆腐切割为一个一个的小块来进行售卖 这个函数需要三个参数: 被切割的数组(必需) ...

  2. PHP数组函数array_combine(合并数组)

    在PHP中,数组函数 array_combine() 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值.     函数语法: array_combine ( array $keys , ...

  3. ConcurrentHashMap源码深度解析(一)(java8)——不可不知的基本概念(助你拿下源码事半功倍)

    文章目录 一.前言 二.基本定义 1.基本常量 2.基本属性 三.构造器优化 1.ConcurrentHashMap(int initialCapacity, float loadFactor, in ...

  4. 深度解析源码strcpy函数

    深度解析源码strcpy函数@TOC 前言 提示:这里可以添加本文要记录的大概内容: 本文将介绍c语言中string.h中strcpy函数的源码解析 提示:以下是本篇文章正文内容,下面案例可供参考 一 ...

  5. 语言中拟合函数 计算aic_Go语言函数深度解析(中)

    上回函数深度解析给大家聊了一些函数的基本知识,不知道还有没有人记得,不记得赶紧回去复习! 他们是 go语言中函数的基本原理 单/多个同/不同类型参数 单/多个同/不同类型返回值 值传递,引用传递 函数 ...

  6. go float64 转int_深挖Go函数之深度解析(下):可变参数

    接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解. 函数简单使用和基本知识解析 匿名函数和闭包 这次给大家带来了一个函数的特性[可变参数],作为函数专题的结束. 有没有发现? 我们有时 ...

  7. sprintf函数_三分钟学 Go 语言——函数深度解析(下) 可变参数

    接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解. 函数简单使用和基本知识解析 匿名函数和闭包 五一放假期间,我懂得,估计你们都不想学习. 小熊这两天因为个人种种令人难受的原因,没有能 ...

  8. C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28)

    C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28) 函数重载的回顾 函数重载的本质为相互独立的不同函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到 ...

  9. Hive 超赞的解析 Json 数组的函数

    背景 大数据的 ETL(Extract-Transfer-Load) 过程的 Transfer 阶段,需要对 json 串数据进行转换"拍平"处理. 亲测!超好用 Hive 内置的 ...

  10. 深度解析ASP.NET2.0中的Callback机制

    callback的一般使用方法还算简单,直接参照msdn的帮助和范例就足够了.但是想要真正用好.用精,或者想开发一些基于callback机制的WEB组件,那么,就要先深入了解callback的实现机制 ...

最新文章

  1. asp.net服务器控件button先执行js再执行后台的方法
  2. docker 镜像上传至hub时报错,提示:denied: requested access to the resource is denied
  3. Django输入日期返回第几天time
  4. 起点低,是彪悍的最好证明!
  5. windows数据自动上传服务器,windows服务器间自动传输文件
  6. .net core 正则表达式 获取 等号后面的值_Python3 正则表达式
  7. 退化函数及多种复原方法【Matlab】
  8. Dos命令使用Latex编写“Hello Latex.”
  9. 在linux服务器搭建函数,linux ftp服务器搭建
  10. N+1:创新点的设计
  11. cad插入块_CAD图块全攻略:别羡慕我下班早,我的CAD软件会开挂
  12. 计算机基础与office应用教程,计算机基础与Office 2010实用教程
  13. PLC可编程控制器实验装置
  14. 使用 VS 打开 VC++6.0 创建的 MFC 项目
  15. mysql 1033_mysql报错1033 Incorrect information in file: ''''xxx.frm''''问题的解决方法(图)...
  16. Tableau基础-第一章(初学者)
  17. angular基础学习
  18. Java项目:CRM客户关系管理系统(Spring+SpringMVC+MyBatis + maven)
  19. 我吃的肉里都有量子力学了?
  20. 什么是笔记本的南桥和北桥?

热门文章

  1. python学习-day15:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r...
  2. 计算机网络mac地址作用是什么,路由器中MAC地址克隆的用途是什么
  3. 达梦数据库大量Failure occurs in data_recv_inet_once告警
  4. python怎么编辑图片中的文字_Python在图片中添加文字的两种方法
  5. 怎么在contenteditable可编辑的div插入图片
  6. 2019年nodejs凉了吗?凉到什么程度了?
  7. 最简单小米设备怎么不root激活xposed框架
  8. 教师利用计算机中的视频图片,多媒体在计算机教学中的作用
  9. 三维视觉之结构光原理详解
  10. bzoj1627 / P2873 [USACO07DEC]泥水坑Mud Puddles