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正则表达匹配中文问题分析小结
Mar 25 PHP
php模拟js函数unescape的函数代码
Oct 20 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
php Session无效分析资料整理
Nov 29 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
PHP学习记录之数组函数
Jun 01 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 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与XML的PDF文档生成技术
2006/10/09 PHP
怎样在php中使用PDF文档功能
2006/10/09 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
Firefox下无法正常显示年份的解决方法
2014/09/04 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
python输入错误密码用户锁定实现方法
2017/11/27 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
python批量修改ssh密码的实现
2019/08/08 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
Python通过字典映射函数实现switch
2020/11/06 Python
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
电气个人求职信范文
2014/02/04 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
七一晚会主持词
2015/06/29 职场文书
小学生读书笔记范文
2015/06/30 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
mysql 获取时间方式
2022/03/20 MySQL