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. Android下LayoutInflater的使用

    在我们想XML布局文件转换为View对象的时候.我们都会使用LayoutInflate对象.顾名思义咋一眼就能看出来他是布局填充器.那么接下来看看LayoutInfalte的使用 总体分为 Layou ...

  2. oracle 学习笔记(三)

    1. SQL(基础查询) 1.1. 基本查询语句 1.1.1. FROM子句 SQL查询语句的语法如下:   SELECT <*, column [alias], -> FROM tabl ...

  3. scenejs的一点Cameras小笔记

    视图模式: 一如官网所见,这个cameras 是控制的视口的东西. 他有如下4个模式 1.orbit模式 鼠标拖中物体,切换视口观察物体,鼠标滚轮变换, 放大缩小可视范围. 2.orbit/spin模 ...

  4. 汗,Google又调整了编译工具(升级SDK先备份!!!)

    1./tools 下的apkbuilder消失了 方法一.用老版本ADT中的apkbuilder(apkbuilder.bat--windows) 方法二.重新生成build.xml文件 2.aapt ...

  5. PHP 链接多种数据库 的方法

    数据库中  单词之间的空格(一个语句前面和后面做字符串拼接的时候最好留空格 )  可以随便加   其他地方  禁止随便加空格!!(加了 就报错)! =====================总结=== ...

  6. Eclipse 增加php插件

    Eclipse 下载解压后运行, Help ------> Install New Software,在 Work whit 输入http://download.eclipse.org/tool ...

  7. CC2540自己的配置文件

    首先要指出,字段属性有notify的不能同时有read,write属性,别问哥,哥也不知道,反正我做的就不能notify,只能read,write. 分享的程序段第一字段有notify属性,第二字段r ...

  8. 【jQuery】--图片轮播

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 建表and新增删除数据A

    SELECT*FROM 表名:查询表 新建数据库: select 文件名(可以很多被查询的文件名)from 文件名 创建student表  CREATE TABLE `student`  ( `id` ...

  10. 假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢

    比如: select id, name from table1 where name = 'x' union all select id, name from table2 where name =  ...