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 5.0 Pear安装方法
Dec 06 PHP
php 三维饼图的实现代码
Sep 28 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
PHP中数据库单例模式的实现代码分享
Aug 21 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
js代码实现微博导航栏
Jul 30 PHP
php检查页面是否被百度收录
Oct 28 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
yii操作cookie实例简介
2014/07/09 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
使用python制作一个解压缩软件
2019/11/13 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
车间工艺员岗位职责
2013/12/09 职场文书
学校安全防火方案
2014/06/07 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python