0

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 Answers 4

3

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.

Sign up to request clarification or add additional context in comments.

2 Comments

Unfortunately $array[]=$mod; returns 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 ) and not Array ( [0] => 2011/03/13 [1] => 2011/03/14 [2] => 2011/02/21 ). Any solution?
Well, why don't you print your value after the loop?
1
                $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.

1 Comment

You're doing the print_r from within the loop, so you're getting all the intermediate stages while the array's still being built. Move the print_r() command OUTSIDE the while() loop so you only get the final result.
1

You can achieve this by replacing this code: $array=array($mod); with this code: $array[]=$mod;.

Comments

1

Try replacing the commented out line with $b[] = $array

1 Comment

You're doing a print_r from within the loop, so you're seeing the array at each iteration as it's built. move the print_r statement OUTSIDE the loop so you only see the final result. I don't know why you're getting the full y/m/d h:m:s output - your date format string should only return the y/m/d portion. Possibly your live code is doing something different than what you'd pasted here.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.