PHP实现提取多维数组指定一列的方法总结


Posted in PHP onDecember 04, 2019

本文实例讲述了PHP实现提取多维数组指定一列的方法。分享给大家供大家参考,具体如下:

PHP中对多维数组特定列的提取,是个很常用的功能,正因为如此,PHP在5.5.0版本之后,添加了一个专用的函数array_column()。当然,如果你的PHP版本低于5.5.0,就得用别的方法处理了。

例如,对于以下这个数组:

$user = array(
 '0' => array('id' => 100, 'username' => 'a1'),
 '1' => array('id' => 101, 'username' => 'a2'),
 '2' => array('id' => 102, 'username' => 'a3'),
 '3' => array('id' => 103, 'username' => 'a4'),
 '4' => array('id' => 104, 'username' => 'a5'),
);

我们要提取其中的 usename 列,变成:

$username = array('a1', 'a2', 'a3', 'a4', 'a5');

方法有以下几种。

1 array_column函数法

用PHP内置的 array_column() 函数是最简单的方法,限制是PHP版本必须是5.5.0及以上版本,方法:

$username = array_column($user, 'username');

2 array_walk函数法

array_walk()函数使用用户自定义函数对数组中的每个元素做回调处理,实现当前功能的方法:

$username = array();
array_walk($user, function($value, $key) use (&$username){
 $username[] = $value['username'];
});

3 array_map函数法

array_map()函数和array_walk() 作用类似,将回调函数作用到给定数组的单元上。

$username = array();
array_map(function($value) use (&$username){
 $username[] = $value['username'];
}, $user);

实际使用时,我们可以用array_map()写出和PHP内置array_column()一样功能的函数:

/**
 * 获取二维数组指定的一列,并以一维数组格式返回
 * 作用和PHP5.5.0中的array_column()函数一样
 * @param $input array 需要取出数组列的多维数组(或结果集)
 * @param $column_key string 需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键。 也可以是NULL,此时将返回整个数组
 * @param $index_key string 作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
 * @return array|null
 */
function array_column($input, $column_key, $index_key = null) {
 $arr = array_map(function($d) use ($column_key, $index_key) {
  if (!isset($d[$column_key])) {
   return null;
  }
  if ($index_key !== null) {
   return array($d[$index_key] => $d[$column_key]);
  }
  return $d[$column_key];
 }, $input);
 if ($index_key !== null) {
  $tmp = array();
  foreach ($arr as $ar) {
   $tmp[key($ar)] = current($ar);
  }
  $arr = $tmp;
 }
 return $arr;
}

4 foreach循环法

foreach循环相对上面的方法效率稍微低一些,但简单容易理解。

$username = array();
foreach ($user as $value) {
 $username[] = $value['username'];
}

5 array_map变种

方法如下,意为把$user数组的每一项值的开头值移出,并获取移除的值作为新数组。注意此时新数组$username的键仍是原数组$user的键,如下。

$username = array_map('array_shift', $user);

注意:该功能会获取$user中的 id 列,而不是 username 列。

另外,如果需要获取二维数组每一项的开头列或结尾列,也可以这样做:

$username = array_map('reset', $user);
$username = array_map('end', $user);

这三个变种方法作用比较局限,仅在获取第一列或最后一列的时候有用,在复杂的数组中就难以发挥作用了。

参考资料:

  1. php获取二维数组中某一列的值集合
  2. php 快速的对二维数组某一列进行组装的方法

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php正则表达匹配中文问题分析小结
Mar 25 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
php获取访问者IP地址汇总
Apr 24 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
php中的抽象方法和抽象类
Feb 14 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
PHP addslashes()函数讲解
Feb 03 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 #PHP
PHP实现发送微博消息功能完整示例
Dec 04 #PHP
PHP连续签到功能实现方法详解
Dec 04 #PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 #PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 #PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 #PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 #PHP
You might like
咖啡的植物学知识
2021/03/03 咖啡文化
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
CI框架中$this->load->library()用法分析
2016/05/18 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
javascript scrollTop正解使用方法
2013/11/14 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
Python 爬虫的工具列表大全
2016/01/31 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
详谈python http长连接客户端
2017/06/12 Python
Python实现的弹球小游戏示例
2017/08/01 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
python爬取淘宝商品销量信息
2018/11/16 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
Python sublime安装及配置过程详解
2020/06/29 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
八一建军节营销活动方案
2014/08/31 职场文书
个人自荐书范文
2015/03/09 职场文书