在CodeIgniter中如何访问键名含反斜杠\的数组元素?
如何访问CodeIgniter directory_map返回的带反斜杠键名的数组元素
嘿,这个问题我之前在项目里也碰到过!当你用CodeIgniter的directory_map()函数遍历目录时,返回的数组里目录对应的键名会自带反斜杠(比如cache\),这是函数默认用来区分目录和文件的方式。要访问这些键对应的元素其实很简单,给你几种实用的方法:
方法一:直接用转义后的键名访问
因为反斜杠在PHP字符串里是转义字符,所以你需要把键名里的反斜杠转义后再使用:
public function dirNames() { $maps = directory_map('./application',2); // 用单引号包裹键名,转义反斜杠 $cacheContents = $maps['cache\\']; print_r($cacheContents); // 用双引号包裹也可以,同样需要转义 $configContents = $maps["config\\"]; print_r($configContents); }
这里的两个反斜杠\\会被PHP解析为一个实际的反斜杠,刚好匹配数组里的键名。
方法二:先清理键名,再正常访问
如果你觉得每次转义太麻烦,可以先遍历数组,把所有目录键名末尾的反斜杠去掉,之后就能用普通的键名访问了:
基础foreach写法
public function dirNames() { $maps = directory_map('./application',2); $cleanMaps = []; foreach ($maps as $key => $value) { // 去掉键名末尾的反斜杠 $cleanKey = rtrim($key, '\\'); $cleanMaps[$cleanKey] = $value; } // 现在直接用不带反斜杠的键名访问 print_r($cleanMaps['cache']); print_r($cleanMaps['config']); }
更简洁的函数式写法
如果你喜欢用PHP的数组函数,可以用array_combine配合array_map来快速处理:
public function dirNames() { $maps = directory_map('./application',2); $cleanMaps = array_combine( array_map(fn($key) => rtrim($key, '\\'), array_keys($maps)), $maps ); print_r($cleanMaps['cache']); }
额外小提示
为什么会出现带反斜杠的键名?其实directory_map()函数会给目录名加上当前系统的路径分隔符(Windows下是反斜杠,Linux/macOS下是正斜杠),用来明确区分数组里的元素是目录还是文件——带分隔符的是目录,不带的是文件。如果你的项目需要跨平台运行,处理键名时可以用DIRECTORY_SEPARATOR常量代替硬写的\\,兼容性更好:
$cleanKey = rtrim($key, DIRECTORY_SEPARATOR);
内容的提问来源于stack exchange,提问作者Chaitanya Bhallamudi
相关产品推荐
相关产品推荐

