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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
php通过隐藏表单控件获取到前两个页面的url
Sep 09 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
Mar 27 PHP
php实现word转html的方法
Jan 22 PHP
轻松掌握php设计模式之访问者模式
Sep 23 PHP
php事件驱动化设计详解
Nov 10 PHP
详解json在php中的应用
Sep 30 PHP
解决php extension 加载顺序问题
Aug 16 PHP
PHP 图片处理
Sep 16 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/02 无线电
PHP If Else(elsefi) 语句
2013/04/07 PHP
PHP实现的简单缓存类
2015/07/29 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
JS 对象介绍
2010/01/20 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
js实现移动端轮播图
2020/12/21 Javascript
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python返回数组的索引实例
2019/11/28 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
升旗仪式演讲稿
2014/05/08 职场文书
学校社会实践活动总结
2014/07/03 职场文书
党校毕业心得体会
2014/09/13 职场文书
2014个人年度工作总结
2014/12/15 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
Python基于百度AI实现抓取表情包
2021/06/27 Python