0

配列の問題を解決するには?

例外結果:

Array
(
    [0] => 2011/03/13
    [1] => 2011/03/14
    [2] => 2011/02/21
)

私が今得る失敗した結果:

Array
(
    [0] => 2011/03/13
)
Array
(
    [0] => 2011/03/14
)
Array
(
    [0] => 2011/02/21
)

PHP コード:

<?php
function get_dir_iterative($dir='.',$exclude=array('cgi-bin','.','..')){
    $exclude=array_flip($exclude);
    if(!is_dir($dir)){return;}
    $dh=opendir($dir);
    if(!$dh){return;}
    $stack=array($dh);
    $level=0;
    while(count($stack)){
        if(false!==($file=readdir($stack[0]))){
            if(!isset($exclude[$file])){
                if(is_dir("$dir/$file")){
                    $dh=opendir("$file/$dir");
                    if($dh){
                        $d=$file;
                        array_unshift($stack,$dh);
                        ++$level;
                    }
                }else{
                    if(isset($d)&&$level>0){
                        $mod=date('Y/m/d',filemtime("$d/$file"));
                        $ds="$d/";
                    }else{
                        $mod=date('Y/m/d',filemtime($file));
                        $ds='';
                    }
                    $array=array($mod);
                    //$b=array_merge($array); // it doesn't solve the problem
                    print_r($array);
                }
            }
        }else{
            closedir(array_shift($stack));
            --$level;
        }
    }
}
get_dir_iterative();
?>

更新:
で 置き換え$array=array($mod);ても、例外の結果$array[]=$mod;は返されません。

Array
(
    [0] => 2011/03/13
)
Array
(
    [0] => 2011/03/13
    [1] => 2011/03/14
)
Array
(
    [0] => 2011/03/13
    [1] => 2011/03/14
    [2] => 2011/02/21
)
4

4 に答える 4

3

array_merge() は、いくつかのパラメーター、マージする配列を受け取ります。状況では、次のようにする必要があります。

array_merge($array, $mod);
// Or:
$array[] = $mod;

グローバル配列に新しいエントリを追加するだけで (2 番目の例)、値を追加できることに注意してください。Array_merge は必要以上のメモリを消費します。

于 2011-03-14T14:00:33.730 に答える
1

$array=array($mod);これを実現するには、この code:をこの code : に置き換えます$array[]=$mod;

于 2011-03-14T14:02:12.607 に答える
1
                $array=array($mod);
                //$b=array_merge($array); // it doesn't solve the problem
                print_r($array);

1 つには、array_merge を実行するには少なくとも 2 つの配列が必要です。提供しているのは 1 つだけなので、マージするものはありません。「ライブ」バージョンでは毎回新しい配列が作成されるため、「悪い」出力が得られます。なぜ単純にしないのですか

 $array[] = $mod;

各反復でファイルの mtime を配列に追加しますか? ファイルの詳細も保存したい場合があるので、mtime がどこから来ているかがわかります。

 $array[$dir/$file] = $mod;

もっと役に立つかもしれません。

于 2011-03-14T14:02:35.947 に答える
1

コメントアウトされた行を次のように置き換えてみてください$b[] = $array

于 2011-03-14T14:02:51.677 に答える