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 相关文章推荐
一个取得文件扩展名的函数
Oct 09 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
分享一段php获取linux服务器状态的代码
May 27 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
PHP基本语法
Mar 31 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
Protoss魔法科技
2020/03/14 星际争霸
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
PHP之密码加密的几种方式
2015/07/29 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
js中的面向对象入门
2017/03/06 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
python在协程中增加任务实例操作
2021/02/28 Python
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
PHP开发的一般流程
2013/08/13 面试题
结婚喜宴主持词
2014/03/14 职场文书
工程质量承诺书
2014/03/27 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
医院合作协议书
2014/08/19 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
2016年父亲节寄语
2015/12/04 职场文书