PHP array problem, array_merge() does not solve the problem
How to solve array problem?
Excepted result:
Array
(
[0] => 2011/03/13
[1] => 2011/03/14
[2] => 2011/02/21
)
Failed result that I get now:
Array
(
[0] => 2011/03/13
)
Array
(
[0] => 2011/03/14
)
Array
(
[0] => 2011/02/21
)
PHP code:
<?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/$fil开发者_如何学编程e"));
$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();
?>
Update:
On replacing$array=array($mod);
with $array[]=$mod;
does not return excepted result.
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
)
array_merge() takes several parameters, the arrays that you want to merge, in your situation it should be:
array_merge($array, $mod);
// Or:
$array[] = $mod;
Note that you can simply add a new entry to your global array (second example) to add a value. Array_merge eats more memory than it needs.
$array=array($mod);
//$b=array_merge($array); // it doesn't solve the problem
print_r($array);
For one, array_merge requires at least two arrays to do its thing. You're only providing one, so there's nothing to merge with. Your "live" version creates a new array each time, so that's why you're getting the 'bad' output. Why not simply do
$array[] = $mod;
which'll append the file's mtime to the array on each iteration? You might want to store the file's details as well, so you know where the mtime's coming from, so
$array[$dir/$file] = $mod;
might be of more use.
You can achieve this by replacing this code: $array=array($mod);
with this code: $array[]=$mod;
.
Try replacing the commented out line with $b[] = $array
精彩评论