PHP5.3以上  用到了array_map 使用匿名函数进行处理

代码:

  1. <?php
  2. function array_col($arr = array(), $idx = 0, $newidx = 0)
  3. {
  4. if (function_exists('array_column') && !is_array($idx) && is_bool(strpos($idx, ',', 1))) {
  5. return array_column($arr, $idx, $newidx);
  6. } else {
  7. return array_map(function($element) use($idx, $newidx) {
  8. $ret_arr = array();
  9. $tmp = !is_array($idx) && is_int(strpos($idx, ',', 1))?explode(',', $idx):0;
  10. $ntmp = !is_array($newidx) && is_int(strpos($newidx, ',', 1))?explode(',', $newidx):0;
  11. if (empty($tmp)) {
  12. return $ret_arr;
  13. }
  14. $tmpc_idx = count($tmp);
  15. $tmpc_newidx = count($ntmp);
  16. if (is_int($ntmp) || empty($ntmp)) {
  17. for ($i=0; $i < $tmpc_idx; $i++) {
  18. $ret_arr[]=$element[$tmp[$i]];
  19. }
  20. } else {
  21. if ($tmpc_newidx>=$tmpc_idx) {
  22. for ($i=0; $i < $tmpc_newidx; $i++) {
  23. $ret_arr[$element[$ntmp[$i]]]=$element[$tmp[$i]];
  24. }
  25. }
  26. }
  27. return $ret_arr;
  28. }, $arr);
  29. }
  30. }
  31.  
  32. $a = array(
  33. array(
  34. 'id' => 2135,
  35. 'first_name' => 'John',
  36. 'last_name' => 'Doe',
  37. ),
  38. array(
  39. 'id' => 3245,
  40. 'first_name' => 'Sally',
  41. 'last_name' => 'Smith',
  42. )
  43. );
  44.  
  45. var_export( array_col($a, 'id,last_name','first_name,first_name'));
  46.  
  47. ?>

output:

  1. <?php
  2. array (//覆盖掉了
  3. 0 =>
  4. array (
  5. 'John' => 'Doe',
  6. ),
  7. 1 =>
  8. array (
  9. 'Sally' => 'Smith',
  10. ),
  11. )
  12. ?>

new ONE

  1. <?php
  2. function array_col($arr = array(), $idx = array(), $newidx = array(), $pfx = 'var_', $sp = '+')
  3. {
  4. if (function_exists('array_column') && !is_array($idx) && is_bool(strpos($idx, ',', 1))) {
  5. return array_column($arr, $idx, $newidx);
  6. } else {
  7. return array_map(function($element) use($idx, $newidx, $sp, $pfx) {
  8. $ret_arr = array();
  9. $tmp = !is_array($idx)?explode(',', $idx):array();
  10. $ntmp = !is_array($newidx)?explode(',', $newidx):array();
  11. $tmpc_idx = count($tmp);
  12. $tmpc_newidx = count($ntmp);
  13. if (is_int($ntmp) || empty($ntmp)) {
  14. for ($i=0; $i < $tmpc_idx; $i++) {
  15. $ret_arr[]=$element[$tmp[$i]];
  16. }
  17. } else {
  18. $ele_keys = array_keys($element);
  19. if (!empty($tmp) && $tmpc_newidx>=$tmpc_idx) {
  20. for ($i=0; $i < $tmpc_newidx; $i++) {
  21. $keys=explode('+', $ntmp[$i]);
  22. if (empty($keys) || !in_array($tmp[$i], $ele_keys)) {
  23. continue;
  24. }
  25. $ret_arr[$pfx . join($sp, array_intersect_key($element,array_flip($keys)))]=$element[$tmp[$i]];
  26. }
  27. }
  28. }
  29. return $ret_arr;
  30. }, $arr);
  31. }
  32. }
  33. ?>

PHP获取二维数组中的指定若干列【同array_column】的更多相关文章

  1. 二维数组过滤,根据多个条件获取二维数组中指定的arr

    /** * 二维数组过滤,根据多个条件获取二维数组中指定的arr * @param $data_arr * @param $lm_number * @param $source_type * @par ...

  2. PHP 如何获取二维数组中某个key的集合(高性能查找)

    分享下PHP 获取二维数组中某个key的集合的方法. 具体是这样的,如下一个二维数组,是从库中读取出来的. 代码: $user = array( 0 => array( 'id' => 1 ...

  3. PHP 获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享. 具体是这样的,如下一个二维数组,是从库中读取出来的. 代码清单: $user = array( 0 => array( 'id'  ...

  4. php获取二维数组中某一列的值集合

    $result //二维数组$uid_list = array_column($result, 'uid');

  5. PHP递归获取二维数组中指定key的值

    $data = [ "resulterrorCode" => 0, "resultraw" => [ "result" => ...

  6. PHP根据array_map、array_reduce和array_column获取二维数组中某个key的集合

    http://camnpr.com/php-python/1715.html 巧用array_map()和array_reduce()替代foreach循环

  7. C#获取二维数组的行数和列数及其多维。。。

    原文发布时间为:2008-11-26 -- 来源于本人的百度文章 [由搬家工具导入] 有一个二维数组sz[,] 怎样获取sz 的行数和列数呢? sz.GetLength(0) 返回第一维的长度(即行数 ...

  8. 如何从二维数组中的多个key中获取指定key的值?

    精华 LOVEME96 2016-10-21 10:40:19 浏览(1512) 回答(3) 赞(0) 新手求教:二维数组中一般会有多个key,如果我们要获得指定key的值,应该怎么做? 问题标签: ...

  9. PHP二维数组去重(指定键名)

    本例对二维数组中某个指定键名进行去重,发现网上大多使用array_unique或是foreach遍历等方式去重,效果不佳且较为繁琐. 本文以二维数组去重为引,介绍array_column函数的三种用法 ...

随机推荐

  1. Android的Intent.FLAG_ACTIVITY_CLEAR_TOP无效

    转载:http://blog.csdn.net/u011361576/article/details/48626237 今天写代码遇到了一个问题: 当 B - A - B 跳转的时候,使用Intent ...

  2. angularjs $scope.$watch(),监听值得变化

    myApp.controller('firstController',function($scope,$interval){ $scope.date = new Date(); setInterval ...

  3. oracle忘记密码

    1.输入命令: sqlplus /nolog ,进入oracle控制台,并输入 conn /as sysdba;以DBA角色进入. 2.连接成功后,输入"select username fr ...

  4. Ninject学习(一) - Dependency Injection By Hand

    大体上是把官网上的翻译下而已. http://www.ninject.90iogjkdcrorg/wiki.html Dependency Injection By Hand So what's Ni ...

  5. Python3.4下安装pip和MySQLdb

    想用pyhton3.4做数据分析,pip和MySQLdb是必要的,一个便于安装常用模块,一个用来操作数据库.当时安装这两个模块时,由于没有人指导,花了很多的时间才安装好. 安装pip时,按照网上的教程 ...

  6. 伪元素::after和::before

    ::after是一个CSS伪元素,使用::after,你可以从CSS里往页面上新增内容(不再要在HTML里有相应的东西).虽然最终生成的东西并不是真正的DOM里的内容,但这些内容能像普通内容一样显示, ...

  7. NodeJS+Express下构建后端MVC文件结构

    关于MVC的结构大体上有两种方式,其一按照层级进行文件夹分类,其二是按照业务进行文件夹分类.关于这个demo相关的业务简单,所以暂采用第一种的方式,当然实际当中很恨复杂的项目可以采用两种方式相结合的方 ...

  8. c#和js互通的AES加密解密

    一.使用场景 在使用前后端分离的框架中常常会进行传输数据相互加密解密以确保数据的安全性,如web Api返回加密数据客户端或web端进行解密,或者客户端或web端进行加密提交数据服务端解密数据等等. ...

  9. mssqlserver 数据库一直提示“正在还原”

    今天访问服务器,突然发现不知道数据库被谁给还原了,而且一直处于还原状态无法结束. 通过查询说是恢复进程被挂起了,最终通过命令: RESTORE database   dbname with recov ...

  10. c#线程间操作无效: 从不是创建控件“textBox1”的线程访问它

    线程开始前: Control.CheckForIllegalCrossThreadCalls = false;