2

CodeIgniter でこの directory_map 関数を使用する方法を理解しようとしています。詳細については、こちらのマニュアルを参照してください: http://codeigniter.com/user_guide/helpers/directory_helper.html

これが私が取り組んでいるもの(一種)であり、結果は次のとおりです。

$this->load->helper('directory');
$map = directory_map('textfiles/');

$index = '';

foreach ($map as $dir => $file) {
  $idx .= "<p> dir: {$dir} </p> <p> file: {$file} </p>";
} #foreach

return $idx;

私のテスト環境のディレクトリとファイル構造:

one [directory]
  subone [sub-directory]
    testsubone.txt [file-in-sub-directory]
  testone.txt [file-in-directory-one]
three [directory]
  testthree.txt [file-in-directory-three]
two [directory]
  testing [sub-directory]
    testagain.txt [file-in-sub-directory-testing]
  test.txt [file-in-directory-testing]
test.txt [file]

これは、私の見解にある出力結果です。

dir: 0
dir: two
file: Array
dir: three
file: Array
dir: 1
file: test.txt
dir: one
file: Array

この結果からわかるように、すべてのディレクトリまたはファイルがリストされているわけではなく、一部は配列として表示されています。

ファイルヘルパーには「get_filenames」関数と呼ばれるものもあります。directory_map でなんとか使えるかもしれません。

また、次のエラーが表示されます。

A PHP Error was encountered
Severity: Notice
Message: Array to string conversion
Filename: welcome.php
Line Number: #

どんな助けでも大歓迎です。ありがとうございます=)

4

1 に答える 1

2

問題は、多次元配列を印刷しようとしていることです。

代わりにこれを試してみてください:
深度カウント付き http://codepad.org/y2qE59XS

$map = directory_map("./textfiles/");

function print_dir($in,$depth)
{
    foreach ($in as $k => $v)
    {
        if (!is_array($v))
            echo "<p>",str_repeat("&nbsp;&nbsp;&nbsp;",$depth)," ",$v," [file]</p>";
        else
            echo "<p>",str_repeat("&nbsp;&nbsp;&nbsp;",$depth)," <b>",$k,"</b> [directory]</p>",print_dir($v,$depth+1);
    }
}

print_dir($map,0);

編集、深度カウントのない別のバージョン: http://codepad.org/SScJqePV

function print_dir($in)
{
    foreach ($in as $k => $v)
    {
        if (!is_array($v))
            echo "[file]: ",$v,"\n";
        else
            echo "[directory]: ",$k,"\n",print_dir($v);
    }
}

print_dir($map);

必要な出力をより具体的にしてください。

コメントで編集
これはパスを追跡します http://codepad.org/AYDIfLqW

function print_dir($in,$path)
{
    foreach ($in as $k => $v)
    {
        if (!is_array($v))
            echo "[file]: ",$path,$v,"\n";
        else
            echo "[directory]: ",$path,$k,"\n",print_dir($v,$path.$k.DIRECTORY_SEPARATOR);
    }
}

print_dir($map,'');

最終編集
戻る関数http://codepad.org/PEG0yuCr

function print_dir($in,$path)
{
    $buff = '';
    foreach ($in as $k => $v)
    {
        if (!is_array($v))
            $buff .= "[file]: ".$path.$v."\n";
        else
            $buff .= "[directory]: ".$path.$k."\n".print_dir($v,$path.$k.DIRECTORY_SEPARATOR);
    }
    return $buff;
}
于 2012-08-24T09:57:22.017 に答える