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 相关文章推荐
第1次亲密接触PHP5(1)
Oct 09 PHP
如何将一个表单同时提交到两个地方处理
Oct 09 PHP
随时给自己贴的图片加文字的php代码
Mar 08 PHP
php a simple smtp class
Nov 26 PHP
PHP Squid中可缓存的动态网页设计
Sep 17 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php实现curl模拟ftp上传的方法
Jul 29 PHP
Yii清理缓存的方法
Jan 06 PHP
php微信开发之谷歌测距
Jun 14 PHP
Laravel 读取 config 下的数据方法
Oct 13 PHP
PHP基于进程控制函数实现多线程
Dec 09 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使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
python缩进区别分析
2014/02/15 Python
Python 转义字符详细介绍
2017/03/21 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
甘南现象心得体会
2014/09/11 职场文书
八项规定整改方案
2014/10/01 职场文书
2016年小学生寒假总结
2015/10/10 职场文书