PHP获取二维数组中的指定若干列【同array_column】
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】的更多相关文章
- 二维数组过滤,根据多个条件获取二维数组中指定的arr
/** * 二维数组过滤,根据多个条件获取二维数组中指定的arr * @param $data_arr * @param $lm_number * @param $source_type * @par ...
- PHP 如何获取二维数组中某个key的集合(高性能查找)
分享下PHP 获取二维数组中某个key的集合的方法. 具体是这样的,如下一个二维数组,是从库中读取出来的. 代码: $user = array( 0 => array( 'id' => 1 ...
- PHP 获取二维数组中某个key的集合
本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享. 具体是这样的,如下一个二维数组,是从库中读取出来的. 代码清单: $user = array( 0 => array( 'id' ...
- php获取二维数组中某一列的值集合
$result //二维数组$uid_list = array_column($result, 'uid');
- PHP递归获取二维数组中指定key的值
$data = [ "resulterrorCode" => 0, "resultraw" => [ "result" => ...
- PHP根据array_map、array_reduce和array_column获取二维数组中某个key的集合
http://camnpr.com/php-python/1715.html 巧用array_map()和array_reduce()替代foreach循环
- C#获取二维数组的行数和列数及其多维。。。
原文发布时间为:2008-11-26 -- 来源于本人的百度文章 [由搬家工具导入] 有一个二维数组sz[,] 怎样获取sz 的行数和列数呢? sz.GetLength(0) 返回第一维的长度(即行数 ...
- 如何从二维数组中的多个key中获取指定key的值?
精华 LOVEME96 2016-10-21 10:40:19 浏览(1512) 回答(3) 赞(0) 新手求教:二维数组中一般会有多个key,如果我们要获得指定key的值,应该怎么做? 问题标签: ...
- PHP二维数组去重(指定键名)
本例对二维数组中某个指定键名进行去重,发现网上大多使用array_unique或是foreach遍历等方式去重,效果不佳且较为繁琐. 本文以二维数组去重为引,介绍array_column函数的三种用法 ...
随机推荐
- 创建dll教程
先看我的总结: 总结: 1.头文件中如果想以C形式提供,要判断,如果定义了 _cplusplus, extern "c"{ 这里写接口声明 } 2.接口声明中,要表明接口接入点的 ...
- UML类图符号 各种关系说明以及举例
UML中描述对象和类之间相互关系的方式包括:依赖,关联,聚合,组合,泛化,实现等. 表示关系的强弱:组合>聚合>关联>依赖 相互间关系 聚合是表明对象之间的整体与部分关系的关联,而组 ...
- centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)
首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...
- Python flask 基于 Flask 提供 RESTful Web 服务
转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...
- selenium webdriver 建行软键盘输入密码
driver.get("https://ibsbjstar.ccb.com.cn/app/V5/CN/STY1/login.jsp"); driver.manage().timeo ...
- PowerDesigner通过SQL语句生成PDM文件
前提: 我用的是PowerDesigner15 数据库为Mysql5.5 步骤如下: 第一步:File->New Model 点击OK创建模板就行了 备注:在创建物理模型时DBMS下拉框是空的, ...
- HDU 1166 敌兵布阵 线段树单点更新求和
题目链接 中文题,线段树入门题,单点更新求和,建一棵树就可以了. #include <iostream> #include <cstdio> #include <cmat ...
- ios app内嵌入http服务器
1.采用CocoaHTTPServer https://github.com/robbiehanson/CocoaHTTPServer 2.采用MongooseDaemon https://githu ...
- ASP.NET获取客户端IP地址
public static string GetRealIP() { string ip; try { ...
- 用markdown简化书写
引言 markdown是什么, 谁在使用markdown, 以及为什么我应该/不应该使用它? 我能从这篇文章中了解到什么, 怎么开始使用? markdown有两个含义: 一套标记语法(类比html,w ...