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. 我的C语言进化史

    Hello, world! 这三年就看看我的C语言还有JAVAscript进化史吧.更厉害的sunmarvell,我等你

  2. flex实验总结

    1.父元素 .box{ display:flex; flex-direction: column;//铺满垂直排列 flex-direction: column-reverse;//铺满垂直反向排列 ...

  3. DispatcherServlet 和 ContextLoaderListener 的关系,到底用哪个?

    我们先看下这两个东东的配置方法: 对于contextConfigLocation参数,有2个地方可以配置: 1)context-param 是全局性配置 2)servlet下的init-param 是 ...

  4. js 实现图片实时预览

    <body> 上传图片: <input type="file" name="file" style="width: 200px; h ...

  5. Js/Jquery获取iframe中的元素

    转载: Js/Jquery获取iframe中的元素 - - ITeye技术网站http://java-my-life.iteye.com/blog/1275205 在web开发中,经常会用到ifram ...

  6. 【Juicer】 一个高效、轻量的前端 (Javascript) 模板引擎

    引用地址:http://juicer.name/docs/docs_zh_cn.html * 一个完整的例子 HTML 代码: <script id="tpl" type=& ...

  7. File文件的使用

    线程的停止: 1.停止一个线程一般是通过一个变量来控制 2.如果需要停止一个处于一个等待状态的线程,那么需要配合interrupture方法来完成 守护线程:(后台线程):在一个进程中只剩下守护线程, ...

  8. android 任意类 获得屏幕大小

    方法一 WindowManager managet=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display ...

  9. kettle系列-我的开源kettle管理平台[kettle-manager]介绍

    kettle管理工具 专门为kettle这款优秀的ETL工具开发的web端管理工具. 项目简介 kettle作为非常优秀的开源ETL工具得到了非常广泛的使用,一般的使用的都是使用客户端操作管理,但问题 ...

  10. C语言的可变参数在Linux(Ubuntu)与Windows下注意点

    基本上C语言的可变参数原理在不同平台和不同编译器下基本类似(通过函数入栈,从右向左,从高位到低位地址),不过部分实现会有所不同:在使用中需要注意的是: va_list 为char 类型指针,部分调用如 ...