PHP遍历数组的6种方式总结


Posted in PHP onNovember 17, 2021

在PHP的日常操作中,数组是最常出现的结构,而我们几乎每天都在处理数组相关的内容。那么问题来了,你一般怎么遍历并处理数组。

1、foreach

很熟悉吧,是不是你的最爱?

$arr = ['a', 'b', 'c'];

foreach ($arr as $key => $value) {
    $arr[$key] = $value . '_i';
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

2、array_map

使用匿名函数的方式,处理数组里的每个元素。遍历完成后返回一个新的数组

$arr = ['a', 'b', 'c'];

$arr = array_map(function ($item) {
    return $item . '_i';
}, $arr);

print_r($arr); // ['a_i', 'b_i', 'c_i'];

你可以同时处理多个数组

$arr_1 = ['a', 'b', 'c'];
$arr_2 = ['你', '好', '吗', '原', '罪'];
// $arr_n = [...];

$arr = array_map(function ($item_1, $item_2) {
    return $item_1 . '_' . $item_2 . '_i';
}, $arr_1, $arr_2);

print_r($arr); // ['a_你_i', 'b_好_i', 'c_吗_i', '_原_i', '_罪_i']

是的,遍历的次数以最长的数组为准。

遍历3次之后,$arr_1 其实是完成了的,所以之后 $item_1 的值都是null

3、array_walk

以引用传递的形式遍历你的数组,没有返回值,而且只能处理一个数组。

$arr = ['a', 'b', 'c'];

array_walk($arr, function (&$item) {
    $item = $item . '_i';
});

print_r($arr); // ['a_i', 'b_i', 'c_i'];

注意到 &$item 了吗,是的,多了个&,代表着你的形参是以引用传递接收数据的。你要做的就是想办法改变这个参数。

假如你处理的是二维数组,处理方式也是万变不离其宗的。

$arr = [
    ['name' => 'a'],
    ['name' => 'b'],
    ['name' => 'c']
];

array_walk($arr, function (&$item) {
    $item['name'] = $item['name'] . '_i';
});

print_r($arr); // [['name' => 'a_i'], ['name' => 'b_i'], ['name' => 'c_i']];

4、for

这应该是超级通用的语法了

$arr = ['a', 'b', 'c'];

for ($i = 0; $i < count($arr); ++$i) {
    $arr[$i] = $arr[$i] . '_i';
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

不推荐使用。它的效率比不上foreach。而且写法上比foreach略繁琐。

5、each

哈哈,这个函数在PHP7.2已经被废弃了@deprecated,而且感觉特别古老的书写方式。这种写法的执行效率也不行,新手应该直接放弃。

$arr = ['a', 'b', 'c'];

while (list($key, $value) = each($arr)) {
    $arr[$key] = $value . '_i';
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

6、reset

准确的讲并不止reset一个函数,需要组合多个内置函数,平常写代码基本是用不上的

$arr = ['a', 'b', 'c'];
// reset() 指针切换到头部,其实默认就是指向开头,可以忽略这句
reset($arr);

// current() 获取当前指针的元素值
while ($value = current($arr)) {
    // key() 获取当前指针的元素下标
    $arr[key($arr)] = $value . '_i';
    // next() 指针移到下一个
    next($arr);
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

总结

到此这篇关于PHP遍历数组的6种方式的文章就介绍到这了,更多相关PHP遍历数组方式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
一个PHP数组应该有多大的分析
Jul 30 PHP
PHP url 加密解密函数代码
Aug 26 PHP
PHP测试程序运行时间的类
Feb 05 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
Jul 02 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
php实现随机生成易于记忆的密码
Jun 19 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
thinkphp5修改view到根目录实例方法
Jul 02 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 PHP
PHP autoload使用方法及步骤详解
Sep 05 PHP
关于PHP数组迭代器的使用方法实例
php双向队列实例讲解
Nov 17 #PHP
如何解决php-fpm启动不了问题
Nov 17 #PHP
一次项目中Thinkphp绕过禁用函数的实战记录
php修改word的实例方法
Nov 17 #PHP
PHP获取学生成绩的方法
Nov 17 #PHP
php去除deprecated的实例方法
Nov 17 #PHP
You might like
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
python对excel文档去重及求和的实例
2018/04/18 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
python类共享变量操作
2020/09/03 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
财务会计应届生求职信
2013/11/24 职场文书
工作决心书
2014/03/11 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers