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过滤危险html代码
Aug 18 PHP
最新的php 文件上传模型,支持多文件上传
Aug 13 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
php多线程并发实现方法
Sep 30 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
php 7新特性之类型申明详解
Jun 06 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 PHP
PHP小白必须要知道的php基础知识(超实用)
Oct 10 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
Mar 12 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
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 addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
详解YII关联查询
2016/01/10 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JQuery里面的几种选择器 查找满足条件的元素$("#控件ID")
2011/08/23 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
Vue.js用法详解
2017/11/13 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
Python跳出循环语句continue与break的区别
2014/08/25 Python
python使用tkinter实现简单计算器
2018/01/30 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
Python虚拟环境venv用法详解
2020/05/25 Python
高考考python编程是真的吗
2020/07/20 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
二手书店创业计划书
2014/01/16 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
家长对孩子的寄语
2015/02/26 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
2015年科协工作总结
2015/05/19 职场文书
刑事申诉状范文
2015/05/20 职场文书
党性修养心得体会2016
2016/01/21 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
详解NodeJS模块化
2021/06/15 NodeJs
SQL 聚合、分组和排序
2021/11/11 MySQL