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 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)
Apr 03 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
基于Zend的Captcha机制的应用
May 02 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
php实现的Cookies操作类实例
Sep 24 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
PHP多态代码实例
Jun 26 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
JS Timing
2007/04/21 Javascript
js 页面执行时间计算代码
2009/03/04 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
js确定对象类型方法
2012/03/30 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
python和c语言的主要区别总结
2019/07/07 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
Django如何实现防止XSS攻击
2020/10/13 Python
python如何快速拼接字符串
2020/10/28 Python
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
高一英语教学反思
2014/01/22 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
python 闭包函数详细介绍
2022/04/19 Python