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调用Oracle存储过程
Oct 09 PHP
3种平台下安装php4经验点滴
Oct 09 PHP
一个php作的文本留言本的例子(六)
Oct 09 PHP
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
ezSQL PHP数据库操作类库
May 16 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
PHP基于GD库的图像处理方法小结
Sep 27 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 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
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
js实现日历
2020/11/07 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
python的pstuil模块使用方法总结
2019/07/26 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
商务日语专业毕业生求职信
2013/10/26 职场文书
竞争上岗演讲稿
2014/01/05 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
公司证明怎么写
2014/09/22 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
Python字典的基础操作
2021/11/01 Python