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

代码:

<?php
function array_col($arr = array(), $idx = 0, $newidx = 0)
{
if (function_exists('array_column') && !is_array($idx) && is_bool(strpos($idx, ',', 1))) {
return array_column($arr, $idx, $newidx);
} else {
return array_map(function($element) use($idx, $newidx) {
$ret_arr = array();
$tmp = !is_array($idx) && is_int(strpos($idx, ',', 1))?explode(',', $idx):0;
$ntmp = !is_array($newidx) && is_int(strpos($newidx, ',', 1))?explode(',', $newidx):0;
if (empty($tmp)) {
return $ret_arr;
}
$tmpc_idx = count($tmp);
$tmpc_newidx = count($ntmp);
if (is_int($ntmp) || empty($ntmp)) {
for ($i=0; $i < $tmpc_idx; $i++) {
$ret_arr[]=$element[$tmp[$i]];
}
} else {
if ($tmpc_newidx>=$tmpc_idx) {
for ($i=0; $i < $tmpc_newidx; $i++) {
$ret_arr[$element[$ntmp[$i]]]=$element[$tmp[$i]];
}
}
}
return $ret_arr;
}, $arr);
}
} $a = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
)
); var_export( array_col($a, 'id,last_name','first_name,first_name')); ?>

output:

<?php
array (//覆盖掉了
0 =>
array (
'John' => 'Doe',
),
1 =>
array (
'Sally' => 'Smith',
),
)
?>

new ONE

<?php
function array_col($arr = array(), $idx = array(), $newidx = array(), $pfx = 'var_', $sp = '+')
{
if (function_exists('array_column') && !is_array($idx) && is_bool(strpos($idx, ',', 1))) {
return array_column($arr, $idx, $newidx);
} else {
return array_map(function($element) use($idx, $newidx, $sp, $pfx) {
$ret_arr = array();
$tmp = !is_array($idx)?explode(',', $idx):array();
$ntmp = !is_array($newidx)?explode(',', $newidx):array();
$tmpc_idx = count($tmp);
$tmpc_newidx = count($ntmp);
if (is_int($ntmp) || empty($ntmp)) {
for ($i=0; $i < $tmpc_idx; $i++) {
$ret_arr[]=$element[$tmp[$i]];
}
} else {
$ele_keys = array_keys($element);
if (!empty($tmp) && $tmpc_newidx>=$tmpc_idx) {
for ($i=0; $i < $tmpc_newidx; $i++) {
$keys=explode('+', $ntmp[$i]);
if (empty($keys) || !in_array($tmp[$i], $ele_keys)) {
continue;
}
$ret_arr[$pfx . join($sp, array_intersect_key($element,array_flip($keys)))]=$element[$tmp[$i]];
}
}
}
return $ret_arr;
}, $arr);
}
}
?>

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. win7系统下 自带的定时关机

    进入cmd下,输入shutdown -s -t 600 以上例子代表的是10分钟后自动关机 -s代表定时关机 -t代表着定时,时间以秒为单位一分钟60s 输入完后按enter 定时关机设置完成 当想取 ...

  2. Linux kernel4.4.12 添加make menuconfig 可选项

    Linux kernel 源码添加可选项 闲来无事,顺便记录一篇在Linux kernel make menuconfig 内添加一个可选项. 说不定将来就要用到这个东西呢. linux kernel ...

  3. find命令

    http://www.jb51.net/os/RedHat/1307.html find 目录(.代表当前目录) -type d -name "..."    f -name &q ...

  4. c语言socket通信

    http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html

  5. python string模块

    string.ascii_lowercase ='abcdefghijklmnopqrstuvwxyz' string.ascii_uppercase ='ABCDEFGHIJKLMNOPQRSTUV ...

  6. 《转载》跟我学spring3

    一.<跟我学spring3>电子书下载地址: <跟我学spring3>  (1-7 和 8-13) http://jinnianshilongnian.iteye.com/bl ...

  7. Excel2013 基本用法(下)

    排序 按行/列排序 选择单元格,点击"排序"(点击之后自动全选) 点击选项,弹出"排序选项",根据自己需要选择按行排序/按列排序. 输入排序条件. 确定. 复杂 ...

  8. js_跨域

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  9. DIV+CSS布局

    宽度自适应两列布局 <!DOCTYPE html> <html> <head> <meta charset="gbk"> <t ...

  10. C# 动态调用DLL库

    最近经常用到C#动态调用类库,简单的做下记录方便以后查询. 使用下面的几行代码就可以简单实现DLL类库的调用了 using System.Reflection; // 引入该命名空间 // 获取roc ...