如何解决阵列问题?
例外结果:
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
)
答案 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