我收到函数dirToArray的错误“ TypeError(“不能将类作为函数调用”)“

时间:2019-01-09 23:59:30

标签: php

我正在读取具有功能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.'" />';
    }
}
?> 

1 个答案:

答案 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);