duanhanglekr37902 2011-03-14 13:56
浏览 39
已采纳

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

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/$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();
?>

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
)
  • 写回答

4条回答 默认 最新

  • dty9731 2011-03-14 14:02
    关注
                    $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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?