| 
	
 | 
 Posted by Big Moxy on 12/23/07 22:59 
On Dec 23, 2:18 pm, My Pet Programmer <anth...@mypetprogrammer.com> 
wrote: 
> Big Moxy said: 
> 
> 
> 
> 
> 
> > On Dec 23, 1:09 pm, My Pet Programmer <anth...@mypetprogrammer.com> 
> > wrote: 
> >> Big Moxy said: 
> 
> >>> On Dec 23, 11:17 am, My Pet Programmer <anth...@mypetprogrammer.com> 
> >>> wrote: 
> >>>> Big Moxy said: 
> >>>>> I have a routine to extract the name and mtime files in a directory. 
> >>>>> PHP by default sorts the array key. I looked at other sort functions 
> >>>>> but don't understand how to sort on a different field. 
> >>>>> Can someone please show me how to sort by the filemtime field instead 
> >>>>> of the filename? 
> >>>>> Thank you! 
> >>>>> Tim 
> >>>>> <TABLE ALIGN=CENTER BGCOLOR=#ffffff CELLPADDING=4 CELLSPACING=0 
> >>>>> border=2> 
> >>>>> <tr><TH>File</TH><TH>Date</TH></TR> 
> >>>>> <?php 
> >>>>>   $dir="./"; 
> >>>>>   if (is_dir($dir)) { 
> >>>>>     $dh = @opendir($dir); 
> >>>>>     if($dh) { 
> >>>>>       while (($file = @readdir($dh)) == true) { 
> >>>>>            $pos = strpos($file, '.'); 
> >>>>>            if (!$pos === false) { 
> >>>>>            if ($file != "." && $file != "..") { 
> >>>>>                    $file_array[] = $file; 
> >>>>>            } 
> >>>>>            } 
> >>>>>       } 
> >>>>>     } 
> >>>>>     sort($file_array); 
> >>>>>     reset($file_array); 
> >>>>>     for($i=0;$i<count($file_array);$i++) { 
> >>>>>            $name=$file_array[$i]; 
> >>>>>         $date = date("Y-m-d H:i", filemtime($name)); 
> >>>>>         if (!is_dir($name)) { 
> >>>>>            print("<tr><TD>$name</TD><TD>$date</TD></TR>\n"); 
> >>>>>         } 
> >>>>>     } 
> >>>>>   } 
> >>>>> ?> 
> >>>>> </TABLE> 
> >>>>http://www.php.net/manual/en/function.asort.php 
> >>>> RTM 
> >>>> ~A!- Hide quoted text - 
> >>>> - Show quoted text - 
> >>> The manual may be easy for you to understand but for me the 
> >>> documentation and subsequent discussion is anything but intuitive. It 
> >>> also doesn't help that all of the code samples are not commented. 
> >>> Is there someone who can respond with the understanding that I may not 
> >>> be an expert PHP programmer? 
> >> My apologies. You are correct in that I assumed you were much more into 
> >> PHP than you are. Comes from spending too much time in the code, I 
> >> think. Ok, so here you go, then: 
> 
> >> When you run asort on an array, it sorts the array by value, instead of 
> >> by key. Since you have an array of filenames you want sorted ascending 
> >> (A-Z), you can run this line of code to sort then appropriately: 
> 
> >> asort($file_array); 
> 
> >> And you don't need to reset the array, your loop looks at them in order, 
> >> so you don't need to worry about the internal array pointer. 
> 
> >> Sorry for the mix up. 
> 
> >> ~A!- Hide quoted text - 
> 
> >> - Show quoted text - 
> 
> > Thank you. I have enough general coding experience to understand a lot 
> > of code however I was lost without any comments in the manual 
> > examples. My original code contained sort($file_array) which yielded 
> > ascending results by file name. I want to sort by filemtime (date/time 
> > last modified). It seems to me that I have to create a new array and 
> > load name and filemtime a two-dimensional array. Is that correct? 
> 
> > That leads me to a new question. How do I create and load the new 
> > array? I tried this: 
> 
> >         // do I explicitly define the new $file_results array? if so, 
> > how? 
> >         // 
> >    for($i=0;$i<count($file_array);$i++) { 
> >            $name=$file_array[$i]; 
> >         $date = date("Y-m-d H:i", filemtime($name)); 
> >         if (!is_dir($name)) { 
> >                    $file_results[$i]['date'] = $date; 
> >                    $file_results[$i]['name'] = $name; 
> >            } 
> >     } 
> 
> > which produces: 
> 
> >        Date        File 
> > Array['date'] Array['name'] 
> > Array['date'] Array['name'] 
> > Array['date'] Array['name'] 
> > Array['date'] Array['name'] 
> > Array['date'] Array['name'] 
> 
> > Thanks, 
> > Tim 
> 
> I thought you would be keying on the name and sorting by date, so I was 
> thinking you could: 
> 
> for(....) { 
>    $file_array[$name] = $date; 
> 
> } 
> 
> asort($file_array); 
> 
> foreach ($file_array as $name=>$date) { 
>   print $name." -- ".$date; 
> 
> } 
> 
> ~A!- Hide quoted text - 
> 
> - Show quoted text - 
 
We're almost there!! url - http://projects.missioninternet.com/proweb/clients/dirlist.php 
 
I used arsort and you can see the file dates are sorted in descending 
order. My question is how do I get rid of the other array elements? 
 
	for($i=0;$i<count($file_array);$i++) { 
    	$name=$file_array[$i]; 
        $date = date("Y-m-d H:i", filemtime($name)); 
        if (!is_dir($name)) { 
			$file_array[$name] = $date; 
		} 
    } 
    arsort($file_array); 
	foreach ($file_array as $name=>$date) { 
       	print("<tr><TD>".$date."</TD><TD>".$name."</TD></TR>\n"); 
    }
 
  
Navigation:
[Reply to this message] 
 |