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 mkdir()定义和用法
Jan 14 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
PHP内置的Math函数效率测试
Dec 01 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 PHP
Laravel 5 学习笔记
Mar 06 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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 删除数组元素
2009/01/16 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
详解php实现页面静态化原理
2017/06/21 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
Python的collections模块真的很好用
2021/03/01 Python
出生证明公证书
2014/04/09 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
先进员工事迹材料
2014/12/20 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
Python装饰器详细介绍
2022/03/25 Python
Go语言安装并操作redis的go-redis库
2022/04/14 Golang