多维数组在php中的遍历

舞夢輝影
发布: 2025-12-05 18:38:02
原创
311人浏览过
PHP遍历多维数组需据维度选择方式:已知结构用嵌套foreach最高效;结构不定用递归函数并设深度限制;仅取叶子值用array_walk_recursive。注意引用、键类型及大数组栈溢出风险。

多维数组在php中的遍历

PHP中遍历多维数组,核心是根据维度层数选择合适的循环方式,常用 foreach 配合嵌套或递归处理。

用嵌套 foreach 遍历已知维度的数组

如果明确知道是二维、三维等固定结构,直接用多层 foreach 最清晰高效。

  • 二维数组:外层遍历行,内层遍历列
  • 三维数组:再加一层 foreach 处理最内层值
  • 注意键名可用 $key => $value 形式获取,避免只取值丢失结构信息

示例(二维):

foreach ($matrix as $rowIndex => $row) {
    foreach ($row as $colIndex => $cell) {
        echo "[$rowIndex][$colIndex] = $cell\n";
    }
}
登录后复制

递归函数统一处理任意深度数组

当维度不确定或结构不规则时,写一个递归函数更灵活可靠。

立即学习PHP免费学习笔记(深入)”;

  • 函数接收数组和当前层级(可选),判断是否为数组再决定是否继续递归
  • 可用 is_array() 做类型判断,避免对非数组元素调用 foreach
  • 建议加个深度限制,防止无限递归(比如超5层就停止)

示例(带层级缩进):

ShopEx 网上商店系统
ShopEx 网上商店系统

国产著名网上商店系统,真正企业级应用软件,性能卓越,在国内外享有盛誉,用户遍布欧洲、美洲、大洋洲,支持多语言,前台与后台均可设置为不同语言界面,用户帮助文档极其丰富,PHP+MySQL+Zend运行环境,让你快速建立个性化的网上商店,内置几十种网上支付网关、内置数十套精美模板,支持实体、非实体商品销售。 更新功能调整: 1、应用中心:APP的“更新时间”字段

ShopEx 网上商店系统 0
查看详情 ShopEx 网上商店系统
function traverse($arr, $depth = 0) {
    foreach ($arr as $key => $value) {
        echo str_repeat("  ", $depth) . "$key => ";
        if (is_array($value)) {
            echo "\n";
            traverse($value, $depth + 1);
        } else {
            echo "$value\n";
        }
    }
}
登录后复制

用 array_walk_recursive 快速提取所有叶子节点

如果只需要访问最底层的值(忽略键和层级),内置函数 array_walk_recursive() 是最简方案。

  • 自动跳过中间的数组元素,只对“非数组”的最终值执行回调
  • 无法获取路径或键的完整上下文,适合日志、统计、扁平化等场景
  • 回调函数参数为 $value, $key, $userdata,第三个可传额外数据

示例(收集所有字符串值):

$strings = [];
array_walk_recursive($data, function($v, $k) use (&$strings) {
    if (is_string($v)) $strings[] = $v;
});
登录后复制

注意事项和常见坑

实际写的时候容易踩几个点:

  • 混用 forforeach:多维时 for 需手动计算长度,易出错;优先用 foreach
  • 引用问题:在嵌套循环里用 &$value 修改原数组要小心,可能影响后续遍历
  • 键类型干扰:关联键和数字键混用时,foreach 仍按插入顺序,但逻辑上需留意键是否可预期
  • 性能考虑:超大数组递归可能导致溢出,此时改用栈模拟递归(while + array_pop)更稳妥

基本上就这些。选哪种方式,主要看你的数组结构是否稳定、要不要保留路径信息、以及是否需要中途干预逻辑。

以上就是多维数组在php中的遍历的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号