PHP数组问题,array_merge()没有解决问题

时间:2011-03-14 13:56:17

标签: php arrays array-merge

如何解决阵列问题?

例外结果:

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 个答案:

答案 0 :(得分:3)

array_merge()接受几个参数,你要合并的数组,在你的情况下它应该是:

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

请注意,您只需向全局数组添加新条目(第二个示例)即可添加值。 Array_merge占用的内存超出了它的需要。

答案 1 :(得分:1)

您可以使用以下代码替换此代码:$array=array($mod);来实现此目的:$array[]=$mod;

答案 2 :(得分:1)

                $array=array($mod);
                //$b=array_merge($array); // it doesn't solve the problem
                print_r($array);

首先,array_merge至少需要两个数组来完成它的工作。你只提供一个,所以没有什么可以合并。您的“实时”版本每次都会创建一个新数组,因此这就是您获得“错误”输出的原因。为什么不简单地做

 $array[] = $mod;

它会在每次迭代时将文件的mtime附加到数组中吗?您可能也想存储文件的详细信息,因此您知道mtime的来源,所以

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

可能更有用。

答案 3 :(得分:1)

尝试用$b[] = $array

替换已注释的行