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统计文件大小,以GB、MB、KB、B输出
May 29 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
如何使用Strace调试工具
Jun 03 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
php按字符无乱码截取中文的方法
Mar 27 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
PHP 返回13位时间戳的实现代码
May 13 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
PHP操作路由器实现方法示例
Apr 27 PHP
php使用event扩展的io复用测试的示例
Oct 20 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
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
javascript this用法小结
2008/12/19 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
javascript常用的方法整理
2015/08/20 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python表示矩阵的方法分析
2017/05/26 Python
Python实现的爬虫功能代码
2017/06/24 Python
python实现二分查找算法
2017/09/21 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
python实现猜拳小游戏
2020/04/05 Python
Python Celery多队列配置代码实例
2019/11/22 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
软件缺陷的分类都有哪些
2014/08/22 面试题
一封普通求职者的求职信
2013/11/20 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
导游词之山西-五老峰
2019/10/07 职场文书