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+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
php str_replace的替换漏洞
Mar 15 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
php分页代码学习示例分享
Feb 20 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
在Windows系统下使用PHP生成Word文档的教程
Jul 03 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
Laravel5.1 框架路由基础详解
Jan 04 PHP
深入解析PHP底层机制及相关原理
Dec 11 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初学者的8点有效建议
2010/11/20 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
PHP7匿名类的用法示例
2019/04/05 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
jquery获取节点名称
2015/04/26 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
python如何进行矩阵运算
2020/06/05 Python
.NET面试10题
2014/02/24 面试题
竞选班长自荐书范文
2014/03/09 职场文书
经典团队口号大全
2014/06/21 职场文书
大学生求职信例文
2014/06/29 职场文书
银行贷款委托书范本
2014/10/11 职场文书
工程资料员岗位职责
2015/04/13 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers