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下MAIL的另一解决方案
Oct 09 PHP
一个域名查询的程序
Oct 09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
令PHP初学者头疼十四条问题大总结
Nov 12 PHP
php中的三元运算符使用说明
Jul 03 PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php延迟静态绑定实例分析
Feb 08 PHP
详解WordPress开发中wp_title()函数的用法
Jan 07 PHP
PHP实现Google plus的好友拖拽分组效果
Oct 21 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP实现字母数字混合验证码功能
Jul 11 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
使用dump函数,给php加断点测试
2013/06/25 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
Django中对数据查询结果进行排序的方法
2015/07/17 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
python实现AES加密与解密
2019/03/28 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python 内置函数汇总详解
2019/09/16 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
新闻专业个人自我评价
2013/09/21 职场文书
小学清明节活动总结
2014/07/04 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
政协委员个人总结
2015/03/03 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL