不用PHP自带的array_column函数实现同样的功能

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 123456
  5. * Date: 2018/9/25
  6. * Time: 19:39
  7. */
  8.  
  9. $records = array(
  10. array(
  11. 'id' => 2135,
  12. 'first_name' => 'John',
  13. 'last_name' => 'Doe',
  14. ),
  15. array(
  16. 'id' => 3245,
  17. 'first_name' => 'Sally',
  18. 'last_name' => 'Smith',
  19. ),
  20. array(
  21. 'id' => 5342,
  22. 'first_name' => 'Jane',
  23. 'last_name' => 'Jones',
  24. ),
  25. array(
  26. 'id' => 5623,
  27. 'first_name' => 'Peter',
  28. 'last_name' => 'Doe',
  29. )
  30. );
  31.  
  32. p(array_column2($records,null,'id'));
  33.  
  34. /**
  35. * 模仿array_column函数1
  36. * @param $arr
  37. * @param $column
  38. * @param NULL $index_key
  39. */
  40. function array_column2($arr,$column,$index_key=NULL){
  41. if ($column && !$index_key){
  42. foreach ($arr as $key=>$val){
  43. $data[] = $val[$column];
  44. }
  45. }
  46. if ($index_key){
  47. foreach ($arr as $key=>$val){
  48. $data[$val[$index_key]] = $column ? $val[$column] : $val;
  49. }
  50. }
  51. return $data;
  52. }
  53.  
  54. p(array_column3($records,null,'id'));
  55.  
  56. /**
  57. * 模仿array_column函数2
  58. * @param $arr
  59. * @param $column_key
  60. * @param null $index_key
  61. */
  62. function array_column3($arr,$column_key,$index_key=null){
  63. $data = array_map(function($d) use ($column_key,$index_key){
  64. // p($d);
  65. if ($column_key && ! $index_key){
  66. return $d[$column_key];
  67. }
  68. if ($index_key){
  69. return [$d[$index_key]=>($column_key === null) ? $d : $d[$column_key]];
  70. }
  71.  
  72. },$arr);
  73. $tmp=[];
  74. if ($index_key){
  75. foreach ($data as $key=>$val){
  76. $tmp[key($val)] = current($val);
  77. }
  78. $data = $tmp;
  79. }
  80. return $data;
  81. }
  82.  
  83. function p($data){
  84. echo '<pre>';
  85. print_r($data);
  86. echo '</pre>';
  87. }

PHP实现同array_column一样的功能的更多相关文章

  1. 为什么解析 array_column不可用,

    不久前,自己在一个小项目,我要拿出每个元素的一维数组key的值,一维阵列的形成,突然想到php 有一种功能,实现. $array = array ( array ( "id" =& ...

  2. PHP 之websocket实现聊天室功能

    一.功能界面 具体的详细代码:https://github.com/yangsphp/websocket-master/tree/master 二.具体代码实现 1.前端代码如下 <!DOCTY ...

  3. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  4. PHP搭建大文件切割分块上传功能

    背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...

  5. SQL Server2014 SP2新增的数据库克隆功能

    SQL Server2014 SP2新增的数据库克隆功能 创建测试库 --创建测试数据库 create database testtest use testtest go --创建表 )) --插入数 ...

  6. SQL Server 数据加密功能解析

    SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...

  7. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  8. TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)

    使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...

  9. Java 8五大主要功能为开发者提供了哪些便利?

    两年前当Java 8发布后,立即受到了业界的欢迎,因为它大大提高了Java的性能.它独特的卖点是,顾及了编程语言的每一个方面,包括JVM(Java虚拟机)和编译器,并且改良了其它帮助系统. Java是 ...

随机推荐

  1. 用户角色权限查询添加bug集锦 用户密码加密 MD5 加盐 随机盐 spring的加密bcrypt

    package cn.itcast.encode; import org.apache.commons.lang3.RandomStringUtils; import org.springframew ...

  2. path不相等的子集,父级

    SELECT a.path,b.path from comm_department_temp a INNER JOIN comm_department_temp b on a.id=b.parent_ ...

  3. B.Icebound and Sequence

    链接:https://ac.nowcoder.com/acm/contest/903/B 题意: Icebound hates math. But Imp loves math. One day, I ...

  4. 7-36 旅游规划 (25 分(Dijkstra)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  5. 078 Subsets 子集

    给定一组不同的整数 nums,返回所有可能的子集(幂集).注意事项:该解决方案集不能包含重复的子集.例如,如果 nums = [1,2,3],结果为以下答案:[  [3],  [1],  [2],  ...

  6. DOM所有的命令(CMD)

    刚接触电脑的时候是从DOS系统开始,DOS时代根本就没有Windows这样的视窗操作界面,只有一个黑漆漆的窗口,让你输入命令.所以学DOS系统操作,cmd命令提示符是不可或缺的.可以告诉大家,大多数的 ...

  7. 传入泛型类型(T.class)的方法

    java中当我们需要T.class时会报错,这是我们只需定义一个Class<T>类作为参数传入即可,具体如下: public List<T> findStuByQuery(De ...

  8. ESP8266串口WiFi扩展板详解

    产品简介 ESP8266串口WiFi扩展板是深圳四博智联科技有限公司开发的一款基于乐鑫ESP8266的超低功耗的UART-WiFi模块,兼容Arduino UNO.Mega等标准主板,可以方便地进行二 ...

  9. so文件动态加载注意事项

    动态加载是指将so文件存放于服务器,在需要用的时候,通过服务器下载到本地,然后加载. 需要注意的: 手机cpu架构,不同的架构运行不同的so 解决方法: 1,欺骗性: 如果so架构不全,就在apk打包 ...

  10. Cordova for iOS

    Cordova,对这个名字大家可能比较陌生,大家肯定听过 PhoneGap 这个名字,Cordova 就是 PhoneGap 被 Adobe 收购后所改的名字. Cordova 是一个可以让 JS 与 ...