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下检测字符串是否是utf8编码的代码
Jun 28 PHP
PHP开发中常用的三个表单验证函数使用小结
Mar 03 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 PHP
php mysql实现mysql_select_db选择数据库
Dec 30 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 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
PHP 可阅读随机字符串代码
2010/05/26 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
在Python中进行自动化单元测试的教程
2015/04/15 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
详解Python中is和==的区别
2019/03/21 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
校园安全广播稿范文
2014/09/25 职场文书
综治维稳工作汇报
2014/10/27 职场文书
篮球赛新闻稿
2015/07/17 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
心理学培训心得体会
2016/01/22 职场文书
python中 Flask Web 表单的使用方法
2022/05/20 Python