PHP拆分路径为层级数组时出现Undefined offset: 0错误如何解决
错误出现原因
- 核心触发点是代码中使用
.=拼接字符串时,未提前初始化$url[$k]变量。内层循环第一次执行拼接操作时,$url[$k]还没有被创建,PHP就会抛出Undefined offset: 0的Notice级警告,这类警告不会阻断代码运行,所以最终数组输出结果看起来符合预期,但属于语法不规范的提示。 - 额外存在隐性问题:现有拼接逻辑会让所有生成的路径末尾多出一个斜杠,比如
$url[2]最终会变成C:/xampp/htdocs/,和你要求的C:/xampp/htdocs格式不匹配。
解决方案
你可以通过提前初始化数组项、修正路径格式两个步骤解决问题,以下是修正后的完整代码:
<?php $directory = "C:/xampp/htdocs"; // 拆分路径为数组 $arr = explode('/', $directory); $n = count($arr); $url = []; for ($i = 0; $i < $n; $i++) { // 提前初始化当前数组项,避免未定义索引警告 $url[$i] = ''; for ($j = 0; $j <= $i; $j++) { $url[$i] .= $arr[$j] . '/'; } // 处理路径格式,去掉多余斜杠同时保证C盘根目录保留斜杠 $url[$i] = $i == 0 ? $url[$i] : rtrim($url[$i], '/'); } print_r($url); ?>
如果想要更高的执行效率,也可以用单层循环实现相同逻辑,时间复杂度从O(n²)降低为O(n):
<?php $directory = "C:/xampp/htdocs"; $arr = explode('/', $directory); $url = []; $currentPath = ''; foreach ($arr as $index => $part) { $currentPath .= $part . '/'; $url[] = $index == 0 ? $currentPath : rtrim($currentPath, '/'); } print_r($url); ?>
运行以上代码都会输出符合你要求的结果,且不会抛出警告。
内容的提问来源于stack exchange,提问作者Umair Ali
相关产品推荐
相关产品推荐

