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
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
php 正则 过滤html 的超链接
Jun 02 PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
删除html标签得到纯文本可处理嵌套的标签
Apr 28 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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实现插入排序?
2013/04/10 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
基于jquery实现二级联动效果
2017/03/30 jQuery
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
青春寄语大全
2014/04/09 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
导游词之任弼时故居
2020/01/07 职场文书
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技