posortowanie tablicy potrzebna pomoc

0

Witam, mam taki skrypt do wyświetlania zdjęć. problem w tym, że chciałbym je posortować aby niedawno dodany element był na szczycie, a nie wiem gdzie dać sortowanie, oraz jakie zastosować.

kod:

      /* settings */
      $image_dir = './zdjecia1/';
      $thumb_dir = './min/';
      $per_column = 4;
     
      /* step one:  read directory, make array of files */
   settype($files, 'array');
      if ($handle = opendir($thumb_dir)) {
         while (false !== ($file = readdir($handle)))
         {
            if ($file != '.' && $file != '..')
            {
                  array_push($files, $file);
            }
         }
         closedir($handle);
      }
      
   natsort($files);
   echo '<div style="background-color:grey; width:800px; height:800px; margin:0 auto;" align="center">';
   echo '<table><tr><td width="150" valign="top"><p  align="center" style="font-size:20px;">Meniu</p>
   		 <a style="margin: 20px 10px 10px 30px;" href="wgraj.php">Dodaj Zdjęcie</a><br />
   		 <a style="margin: 20px 10px 10px 30px;" href="szatan.php">Galeria</a><br />
		 <a style="margin: 20px 10px 10px 30px;" href="usun.php">Usun zdjecie</a>
   		 </td><td align="center" width="650">';
      /* step two: loop through, format gallery */
      if(count($files))
      {
		  echo '<p style="text-align:center; font-size:30px;">Oto twoje zdjecia</p><table border="1"><tr>';
         foreach($files as $file)
         {
            @$count++;
			
            echo '<td width="140" align="center" height="120"><a class="photo-link" rel="lightbox[set]" href="',$image_dir,$file,'"><img src="',$thumb_dir,$file,'" style="border: 1px solid black; margin: 5px 5px 5px 5px;" /></a></td>';
			if($count % $per_column == 0) { echo '<tr></tr>'; }
         }
		 	  	 echo '</tr></table></td></tr></table>';
      }

      else
      {
         echo '<p style="text-align:center; font-size:30px;">Brak zdjec w galerii.</p>';
      }
	  echo '</div>';
	

   ?>
0

ponawiam, dalej sobie z tym nie poradziłem.
Proszę o pomoc.

0

Na początek wyjaśnienie skąd bierze się niechęć do rozwiązania tak banalnego problemu i odpisania w tym wątku:

  1. kod nie jest Twój [możliwe, że coś zmieniłeś, szczególnie przy HTML], a więc proste podpowiedzi mogą nie zadziałać, bo prawdopodobnie nie masz pojęcia co się gdzie dzieje
  2. nie umiesz wybrać z kodu to, co istotne do problemu - niepotrzebny jest ten kod HTML, jak Twój problem kończy się na posortowaniu tablicy

A teraz rozwiązanie:

  • w miejscu gdzie dodajesz plik do tablicy (podpowiedź: linijka z array_push) dodawaj zamiast samej nazwy tablicę w formie powiedzmy: array('date'=>$wartosc, 'name'=>$wartosc), datę modyfikacji pliku wybierzesz oczywiście poprzez filemtime, a data jest zwracana jako timestamp (jeżeli będziesz chciał ją wyświetlać to użyjesz funkcji date, albo strftime)
  • sortowanie takiej tablicy: http://stackoverflow.com/questions/2699086/sort-multidimensional-array-by-value-2 [oczywiście zamiast natsort]
0

Ponownie ja.
Rozwiązałem problem, a teraz po prostu chciałbym pokazać rozwiązany problem i zapytać o twoją fachową opinię.

<?php
   
      /* settings */
      $image_dir = './zdjecia1/';
      $thumb_dir = './min/';
      $per_column = 4;
     
      /* step one:  read directory, make array of files */
   settype($files, 'array');
   $fTime = array();
      if ($handle = opendir($thumb_dir)) {
         while (false !== ($file = readdir($handle)))
         {
            if ($file != '.' && $file != '..')
            {
                  array_push($files, $file);
				  $fTime[] = filemtime($thumb_dir.$file);
            }
         }
         closedir($handle);
      }
      
   array_multisort($fTime, SORT_DESC, $files);

      /* step two: loop through, format gallery */
      if(count($fTime))
      {
		  echo 'Oto twoje zdjecia';
         foreach($files as $file)
         {
            @$count++;
			
            echo '<a class="photo-link" rel="lightbox[set]" href="',$image_dir,$file,'"><img src="',$thumb_dir,$file,'" /></a>';
			if($count % $per_column == 0) { echo ' '; }
         }
		 	  	;
      }

      else
      {
         echo 'Brak zdjec w galerii.';
      }
	  echo '</div>';
	

   ?>
0

nigdy nie używałem array_multisort szczerze, jakoś nie potrzebowałem tego przez te parę lat, ale z tego co zajrzałem w dokumentację - to chyba nie zachowuje się tak jak tego oczekujesz?
ot masz dwie niezależne tablice - $files oraz $fTime, osobno je sortujesz, potem jedną porzucasz. mieszasz też style programowania (raz push, raz []) - to akurat na działanie kodu nie wpływa. ale ogólnie piszesz niedbale - w ten sposób samemu Tobie będzie ciężko to zrozumieć.

1

dlatego właśnie chciałem przeczytać opinię, lecz skrypt zachowuje się dokładnie tak jak tego potrzebuję. Będę starał się następnym razem pisać wszystko od 0 i utrzymywać to w ogólnej zgrabnej formie. Do usłyszenia następnym razem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1