You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP递归函数+foreach循环删除父文件夹及最后文件的执行流程解析

递归删除文件夹的执行流程解析

你的代码通过递归结合foreach实现了文件夹的深度删除,核心逻辑是先清空所有子内容,再删除空文件夹,下面一步步拆解test.txt和父文件夹files的删除过程:

1. 首次调用 delete_dir("../files") 的初始循环

首次调用时,$files数组内容为:

Array
(
    [0] => .
    [1] => ..
    [2] => Apple Logo.png
    [3] => customers.csv
    [4] => sunset.jpg
    [5] => test
    [6] => test.txt
)

foreach循环逐个处理元素:

  • 跳过当前目录.和上级目录..
  • 依次删除Apple Logo.png、customers.csv、sunset.jpg(均为文件,直接执行unlink())
  • 遇到test子文件夹,触发递归调用delete_dir("../files/test")

2. 递归处理test子文件夹

进入delete_dir("../files/test")后,$files数组为:

Array
(
    [0] => .
    [1] => ..
    [2] => Google Logo.png
    [3] => sachin.txt
)

执行流程:

  • 跳过.和..
  • 删除Google Logo.png和sachin.txt(执行unlink())
  • foreach循环结束后,test文件夹已为空,执行rmdir("../files/test")删除该空文件夹
  • 递归调用完成,回到首次调用的foreach循环,继续处理剩余元素

3. 删除test.txt文件

递归返回后,首次调用的foreach循环继续处理下一个元素test.txt:

  • 这是文件,直接执行unlink("../files/test.txt")完成删除

4. 删除父文件夹files

当首次调用的foreach循环处理完所有元素后,../files文件夹已被完全清空(所有文件、子文件夹都已删除),此时执行rmdir("../files"),删除这个空的父文件夹

核心逻辑总结

递归的执行顺序是从最底层的子文件夹开始,清空内容后删除空文件夹,再逐层回到上层,清空上层剩余文件,最后删除上层空文件夹,整个过程是从内到外的"清空-删除"循环。

内容的提问来源于stack exchange,提问作者Sachin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:55:22