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 相关文章推荐
加速XP搜索功能堪比vista
Mar 22 PHP
PHP教程 预定义变量
Oct 23 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
PHP实现163邮箱自动发送邮件
Mar 29 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
我的论坛源代码(七)
2006/10/09 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
简单实现PHP留言板功能
2016/12/21 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
jQuery 性能优化指南 (1)
2009/05/21 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
vue实现记事本功能
2019/06/26 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
Python高效编程技巧
2013/01/07 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
Python语言描述最大连续子序列和
2017/12/05 Python
python读取各种文件数据方法解析
2018/12/29 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
python wsgiref源码解析
2021/02/06 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
几道Web/Ajax的面试题
2016/11/05 面试题
大学生的网上创业计划书
2013/12/31 职场文书
促销活动策划方案
2014/01/12 职场文书
优秀团支部事迹材料
2014/02/08 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
关于安全的标语
2014/06/10 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
加强作风建设心得体会
2014/10/22 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
行政主管岗位职责
2015/02/03 职场文书
Python基础之hashlib模块详解
2021/05/06 Python
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python