我正在读取具有功能dirToArray
的网站的图像目录。
我为每个目录得到的条目太多。这被命名为Array
,并出现错误。它出现在每个目录中。如何删除该条目?
功能:
<?php
function dirToArray($dir) {
$result = array();
$cdir = scandir($dir);
foreach ($cdir as $key => $value){
if (!in_array($value,array(".","..","Array"))){
if (is_dir($dir . DIRECTORY_SEPARATOR . $value)){
$result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value);
}else{
$result[] = $value;
}
}
}
return $result;
}
?>
我的代码读取目录:
<?php
$result=dirToArray("source");
foreach ($result AS $key => $value) {
$head = preg_replace('#_#',' ', $key);
echo '<h2>'.$head.'</h2>';
foreach ($value AS $subKey => $subValue) {
$titel = preg_replace('#_#',' ', subValue);
echo '<img src="backend/source/'.$key.'/'.$subValue.'" alt="'.$titel.'" />';
}
}
?>
答案 0 :(得分:0)
您要打印的循环$result
假定它是一个二维数组:该数组顶层中的所有内容都是目录,而第二层中的则是所有文件。如果目录层次结构中有更多级别,这将是不正确的。 dirToArray()
返回反映目录结构的嵌套数组层次结构。
因此,您需要一个递归函数来打印它,就像您用来创建它的递归函数一样。
function printDirArray($dirname, $array) {
foreach ($array as $key => $value) {
if (is_array($value)) {
$head = str_replace('_', ' ', $key); // don't need `preg_replace` for ordinary characters
echo "<h2>$head</h2>";
printDirArray("$dirname/$head", $value);
} else {
$titel = str_replace('_', ' ', $value);
echo '<img src="backend/source/'.$dirname.'/'.$value.'" alt="'.$titel.'" />';
}
}
}
$result = dirToArray("source");
printDirArray("source", $result);