Dividere ciclo in più parti

  • Creatore Discussione Creatore Discussione haringk
  • Data di inizio Data di inizio

haringk

Nuovo Utente
15 Mar 2010
7
0
0
Salve,

utilizzando uno script per l'elenco dei file in una determinata cartella ricevo, com'è ovvio, un numero di risultati pari al numero dei file nella cartella specificata.

Per motivi che non sto ad elencarvi per non tediarvi, mi si presenta la necessità di dover dividere questo risultato in blocchi da 15 o 20 righe. Con l'aggravante di dover specificare differenti voci tra blocco e blocco.

Cerco di spiegarmi con un esempio:

PHP:
<div class="inizio">
<div class="primo_gruppo">risultati da 001 a 015</div>
<div class="secondo_gruppo">risultati da 016 a 030</div>
<div class="terzo_gruppo">risultati da 031 a 045</div>
....
</div>



Per qualsiasi dubbio inserisco anche lo script che utilizzo per recuperare l'elenco da rielaborare:

PHP:
<?php 

$bn = "./include/galleria_div/bn1/"; // bassa risoluzione - bianco nero
$lr = "./include/galleria_div/lr1/"; // bassa risoluzione - a colori
$hires = "./include/galleria_div/hr1/"; // alta risoluzione
$code = "./include/galleria_div/code1/"; // testo html per il popup


chdir("./include/galleria_div/code1/");
if( !($dp = opendir("./")) )
die("Non riesco a esplorare il contenuto");

while($file = readdir($dp)) {
if(is_file($file))
$lista[] = $file;

}

sort($lista);


foreach($lista as $index => $nome) {

$path_parts = pathinfo($nome);

echo "\n<div class=\"box_img\"><a href=\"" , $code , "", $path_parts['filename'], ".html\"";
echo "rel=\"width:800,height:600\" class=\"advanced\" title=\"I quadri\" ";
echo "onmouseout=\"MM_swapImgRestore()\" onmouseover=\"MM_swapImage('", $path_parts['filename'], "','',";
echo "'" , $lr , "", $path_parts['filename'], ".jpg',1)\"><img src=\"" , $bn , "", $path_parts['filename'], ".jpg\" ";
echo "width=\"110\" height=\"110\" border=\"2\" id=\"", $path_parts['filename'], "\"></a></div>";

} 


?>




Spero di essere stato chiaro e che qualcuno possa aiutarmi.


Grazie.
 
Grazie per la celere risposta, non lo avevo trovato.

Tornando al discorso di cui sopra, quindi, dovrebbe venir fuori qualcosa come...:

PHP:
<?php 

chdir("./include/galleria_div/code1/");
if( !($dp = opendir("./")) )
die("Non riesco a esplorare il contenuto");

while($file = readdir($dp)) {
if(is_file($file))
$lista[] = $file;

}

sort($lista);


foreach($lista as $index => $nome) {

$path_parts = pathinfo($nome);

if (($nome > 0) && ($nome <=15)) {
echo "<div class=\"primo_gruppo\">da 01 a 15</div>";
} elseif (($nome > 15) && ($nome <=30)) {
echo "<div class=\"secondo_gruppo\">da 16 a 30</div>";
} elseif (($nome > 30) && ($nome <=45)) {
echo "<div class=\"terzo_gruppo\">da 31 a 45</div>";
} elseif ..... {
echo .....; 
}


} 


?>


È corretto?
 
Povero me! È vero, il valore $nome non è un numero. È il nome del file X all'interno della cartella specificata.
Scusami, ma non ci avevo neanche pensato.
 
Risolto.


PHP:
<?php 


chdir("./");
if( !($dp = opendir("./")) )
die("Non riesco a esplorare il contenuto");

while($file = readdir($dp)) {
if(is_file($file))
$lista[] = $file;

}

sort($lista);


foreach($lista as $index => $nome) {

	$path_parts = pathinfo($nome);

//	echo $path_parts['filename'] , "<br />\n";

	if (($index > 0) && ($index <= 15)) {
	echo $path_parts['filename'] , "da 01 a 15<br />\n";
	} elseif (($index > 15) && ($index <=30)) {
	echo $path_parts['filename'] , "da 16 a 30<br />\n";
	} elseif (($index > 30) && ($index <=45)) {
	echo $path_parts['filename'] , "da 31 a 45<br />\n";
	} elseif ($index > 45) {
	echo "niente<br />\n"; 
	}

} 


?>




Sbagliavo ad assegnare il valore da "contare".



Grazie mille, MarcoGrazia. Gentilissimo!
 
Aggiungo, per chi fosse interessato, una specifica per auto-rispondermi al messaggio iniziale.

Per ottenere la personalizzazione dei tag all'inizio ed alla fine dei gruppi basta creare un gradino di UN risultato scalandolo dal gruppo stesso. Prima e dopo, ovviamente.


Probabilmente non è un modo ortodosso per eseguirlo, ma funziona.
 
Visto che usi almeno il php 5.2 puoi usare glob() ed eliminare quella tortura che era readdir()

PHP:
<?php 
$path = './';
$index = 0;
$ext = 'estensione_del_file';
foreach (array_filter(glob($path.'*'), 'is_file') as $nome) {

    $path_parts = basename($nome, $ext);

    if (($index > 0) && ($index <= 15)) {
         echo $path_parts , "da 01 a 15<br />\n";
    } elseif (($index > 15) && ($index <=30)) {
         echo $path_parts , "da 16 a 30<br />\n";
    } elseif (($index > 30) && ($index <=45)) {
         echo $path_parts , "da 31 a 45<br />\n";
    } elseif ($index > 45) {
         echo "niente<br />\n"; 
    }
    $index++;
} 


?>
Però c'è qualcosa ancora che non mi torna per via dell'implementazione del ciclo. Bo!
 

Discussioni simili