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中使用Oracle数据库(3)
Oct 09 PHP
让PHP支持断点续传的源码
May 16 PHP
PHP下常用正则表达式整理
Oct 26 PHP
php编程实现获取excel文档内容的代码实例
Jun 28 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
必须收藏的php实用代码片段
Feb 02 PHP
PHP文件操作实例总结
Sep 27 PHP
php简单中奖算法(实例)
Aug 15 PHP
实例解析php的数据类型
Oct 24 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
apache rewrite_module模块使用教程
2008/01/10 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
Python中的魔法方法深入理解
2014/07/09 Python
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
实例讲解python中的协程
2018/10/08 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
python的range和linspace使用详解
2019/11/27 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
html5的canvas方法使用指南
2014/12/15 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
vue中 this.$set的使用详解
2021/11/17 Vue.js
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android