Come ordinare array di files?

Ciao a tutti  :bye:

mi rivolgo per l'ennesima volta alla vostra community per risolvere un problema con php... prometto che prima o poi lo studierò seriamente questo linguaggio di programmazione  :-[

Questo è il mio script per creare una photo gallery dinamica con thumbs partendo da una cartella di files.

<?php
   /* dynamic gallery settings */
   $image_dir = '../gallery/bcg/schede/'; //cartella delle immagini
   
   /* step one: read directory, make array of files */
   if ($handle = opendir($image_dir)) {
      while (false !== ($file = readdir($handle)))
      {
         if ($file != '.' && $file != '..')
         {
            if(strstr($file,'_thumb'))
            {
               $files[] = $file;
            }
         }
      }
      closedir($handle);
   }
   
   /* step two: loop through, format gallery */
   if(count($files))
   {
      foreach($files as $file)
      {
         $count++;
         echo '<div class="boxgrid captionfull">';
         echo '&nbsp;' . '<img src="' . "$image_dir$file" . '" alt="' . "$file" . '" />' . '&nbsp;';
         echo '<div class="cover boxcaption">';
         echo '<p>Art. ' . substr(str_replace('_','/',$file),0,-10) . '</p>';
         
         echo '<p><a rel="shadowbox[galleryname];options={continuous:true,animSequence:\'sync\'}" href="',$image_dir,str_replace('_thumb','',$file),'" title="">' . LANG_FOTO . '</a></p>';
         
         echo '</div>';                                    
         echo '</div>';
            
         if($count % $per_column == 0) { echo '<div class="clear"></div>'; }
         }
      }
      else
      {
         echo '<p>There are no images in this gallery.</p>';
      }
?>

Il problema che riscontro è che, mentre sul sito in locale l'array e quindi le foto vengono ordinate in ordine alfabetico, una volta pubblicato on-line quest'ordine non viene mantenuto.

Da cosa può dipendere questo? Qualche configurazione del server? O secondo voi è lo script che non va?

Grazie a tutti anticipatamente

inviato 5 anni fa
yomo
yomo
1
X 0 X

direi che puoi semplicemente ordinare l'array $files: sort($files);

risposto 5 anni fa
civre
X 0 X

Bene, grazie mille Civre!  :)

Ho inserito questa riga di codice

sort($files); //array in ordine alfabetico

appena sotto la formazione dell'array ed ora sembra tutto sistemato! Grazie ancora!

Per curiosità, come mai si possono verificare queste differenze di "ordinamento" da locale a remoto?

C'entra anche il setting dei vari server?

risposto 5 anni fa
yomo
yomo
1
X 0 X

dalla documentazione: The filenames are returned in the order in which they are stored by the filesystem.

risposto 5 anni fa
civre
X 0 X

Grazie mille Civre! scusami per i tempi di risposta geologici...  ::)

A questo riguardo ora ho un altro problema:

l'ordine che ottengo con la funzione sort($files); è il classico

1

10

100

2

20

200

...

mentre io ho la necessità di ottenere l'ordine numerico

1

2

10

20

100

200

...

considerando che:

1. non posso rinominare i file dell'array aggiungendo gli zeri davanti (001, 010, etc.)

2. non posso collegarmi a un database e settare un campo numerico invece che testuale

c'è qualche funzione php che mi permette di fare ciò o sono spacciato? ho fatto una ricerca ma non riesco a venirne fuori... :-\

risposto 5 anni fa
yomo
yomo
1
X 0 X

Vedi qui la serie di funzioni a disposizione del php per l'ordinamento:

http://php.net/manual/en/array.sorting.php

Ti consiglierei di vedere asort o ksort.

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ho cercato di risolvere in questo modo

// trasformo il contenuto dell'array da stringa a numerico
$sizeof = count($files);
for($i=0;$i< $sizeof;$i++){
$files[$i] = (int)$files[$i];     
}
// ordino l'array                  
sort($files);

trasformando l'array da testuale a numerico, solo che poi, siccome ho dei dati anche non numerici (lettere), non funziona.

Per quanto riguarda le funzioni asort e ksort ho provato anche quelle, ma mi sembra non cambi nulla nell'ordinamento...

Suggerimenti?

risposto 5 anni fa
yomo
yomo
1
X 0 X

Esistono altre funzioni di ordinamento. Leggi bene la loro documentazione.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

credo di aver risolto in questo modo:

sort($files, SORT_NUMERIC); //ordino l'array numericamente

secondo voi è un metodo giusto?

risposto 5 anni fa
yomo
yomo
1
X 0 X

come non detto! :(

purtroppo SORT_NUMERIC mi ordina correttamente solo i file dall'array numerici, mentre mi scompagina tutti gli altri con le lettere.

http://bakokkogroup.it/bakokkogroup/schede.php

Pare che per ogni soluzione ci sia un problema correlato... uff...

Che fare?  :buck:

risposto 5 anni fa
yomo
yomo
1
X 0 X

Vedi di comprendere meglio come vuoi l'ordinamento in base all'array che hai. E' ovvio che se hai un array non numerico non puoi eseguire un ordinamento di tipo numerico. Devi trovare un'altra soluzione che si adatti alle tue esigenze.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Il mio array è di tipo testuale: praticamente leggo i files di una cartella per fare una gallery.

Questi files hanno nomi del tipo 1000.jpg, 4000.jpg, 10000.jpg, 11000.jpg, COL_400.jpg, F100.jpg, LM04.jpg ecc.

Quindi ci sono files il cui nome è composto solamente da numeri, mentre altri composti da numeri e lettere.

Io devo ordinare questo array facendo in modo che i files 10000.jpg e 11000.jpg vengano messi in ordine dopo i files 1000.jpg e 4000.jpg (ordine numerico del tipo 1,2,10,20,100,200 e non 1,10,100,2,20,200) e allo stesso tempo dovrei fare in modo che i files COL_400.jpg vengano ordinati prima dei files F100.jpg e LM04.jpg.

È possibile o bisogna fare due array?

Non ho a disposizione un database quindi non posso nemmeno agire su tabelle e il tipo di campo.

Qualcuno è disposto ad indirizzarmi per lo meno sulla strada da prendere? Grazie mille ancora

risposto 5 anni fa
yomo
yomo
1
X 0 X

Ok, allora ti consiglio natcaasesort. Dovrebbe fare al caso tuo. Se ti interessa distinguere maiuscole da minuscole usa natsort.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

GRAZIE MARIOS!  :) Sei un grande! Grazie mille ancora!

risposto 5 anni fa
yomo
yomo
1
X 0 X

Macchè grande, piuttosto complimenti agli sviluppatori del php che han fornito un sacco di funzioni utili.

 :bye:

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda