Leggere una directory e riempire un array.

bisbiturro

Nuovo Utente
31 Mag 2009
3
0
0
Leggo i nomi dei file da una directory, da ognuno ne estraggo una determinata parte del nome che m'interessa e li metto in un menù a tendina.

PHP:
function getNewsList($accesso){
   $fileList = array();

	if ($handle = opendir("prove/$accesso/prod_contenuti")) {
		while ($file = readdir($handle))  {
		    if (!is_dir($file)) {
		       $fileList[] = $file;
      	}}}	
	
	rsort($fileList);
	return $fileList;


}
//$aa=array();
echo "<select>";
      $list = getNewsList($accesso);
	  
      foreach ($list as $value) {


$estensione=strpos($value,".txt");
$cat=substr($value,14,$estensione);
$cat2=substr($cat,0,-4);
//$i++;
//$aa[$i]=$cat2;
echo "<option>$cat2</option>";

}
echo"</select>";
//echo $aa;

In forma di commento ho messo il mio tentativo non riuscito di fare quello che chiedo sotto.
Ora quello che mi serve è avere da $cat2 solo gli elementi singoli, senza doppioni. Credo di doverli mettere in un array e poi usare l'array_unique ma non riesco a far uscire i valori di $cat2 dal ciclo, mi da sempre un array vuoto.

Sostanzialmente non m'interessa se devo usare un array, un altro ciclo o mia nonna in carriola, mi basta non avere doppioni nel menù a tendina finale. Idee?
 
Ultima modifica:
ciao
ho provato a guardare tra le funzioni array, ma secondo me non ce n'è una che ti serva
secondo me io procedrei cosi facendo una funzione che ti restituisca un array ripulito dei doppioni

1. letta la dir e messa in un array $iniziale=array() e conto i valori $quanti
2. inserisco l'array in un altro $controllo=array() e $controllo=$iniziale
3. ciclo i due array

PHP:
function pulisci($in,){
  $iniziale=$in;
  $controllo=$in;
  $quanti=count($iniziale)-1;//vuoto di memoria non mi ricordo quale è la funzione
  for ($k=0;$k<$quanti;$k++){
     for($j=1;$j<=$quanti;$j++){
        if($iniziale[$k] == $controllo[$j]){
          $iniziale[$k]="";
          //non so se potrebbe andar bene unset($iniziale[$k]) gia qui e quindi niente foeach
       }//fine if
    }//fine for $j
  }//fine for $k
  //togli quelli vuoti
  $cerco=0;
 foreach($iniziale as $valore){
   if($valore==""){ unset($iniziale[$cerco]);}
   $cerco++;
  }

  return $iniziale;
}//fine function

prova al massimo non funzia
 
Ultima modifica:
Ciao. Scusa ma non ho ben capito come fare ad integrarlo col mio codice, potresti spiegare meglio?
 
ciao
da quello che ho capito tu crei un array

$fileList[] = $file;//o quello che è
in cui es. ci sarà

pinco.php
pallo.php
toni.php
pinco.php (pinco.php si ripete)
bepi.php.....

$nuova_fileList=pulisci($fileList[]);

nei due cicli interni si creano due array inizialmente uguali col contenuto dell'array $fileList[]

nei due cicli verifico il primo valore dell'arry iniziale con tutti quelli che sono contenuti in controllo partendo dal secondo

quindi al primo giro avrò

pinco.php == pallo.php no
pinco.php == toni.php no
pinco.php == pinco.php si quindi vuoto o unsetto il valore di $iniziale[2]
pinco.php == bepi.php no

ecc....
scusa mi sono accorto di aver fatto un errore nel secondo for

for($j=($k+1);$j<=$quanti;$j++){ //capita

alla fine ottengo un array

pinco.php
pallo.php
toni.php
""
bepi.php.....
oppure
pinco.php
pallo.php
toni.php
bepi.php.....
se ho usato unset

nel tuo select

echo "<select>";

foreach ($nuova_fileList as $value) {
//......
echo "<option>$cat2</option>";//senza ripetizioni

}
echo "</select>";

spero di essermi spiegato, altrimenti sono qui
 
Ti ringrazio ma alla fine ho risolto in un altro modo, posto il codice se a qualcuno servisse:
PHP:
//leggo i files dalla directory e li metto in array
function getNewsList($accesso){
   $fileList = array();
	if ($handle = opendir("prove/$accesso/prod_contenuti")) {
		while ($file = readdir($handle))  {
		    if (!is_dir($file)) {
		       $fileList[] = $file;
      	}}}	
	rsort($fileList);
	return $fileList;
}

$array_cat=array(); //definisco un nuovo array che mi servirà dopo
      $list = getNewsList($accesso); //richiamo la funzione sopra per leggere la cartella
	  
      foreach ($list as $value) {
$estensione=strpos($value,".txt"); //trovo la posizione dell'estensione del file
$cat=substr($value,14,$estensione); //estraggo la sottostringa che va dal carattere 14 (altra roba del nome) all'estensione
$cat2=substr($cat,0,-4); //dal risultato sopra tolgo l'estensione, ottenendo così la parte del nomefile che m'interessa
$i++; //contatore che poi associo ad $array_cat
$array_cat[$i]=$cat2; //così riempio l'array coi valori di $cat2
}

$array_pulito=array_unique($array_cat); //trovo solo i valori unici dell'array

echo "<select>";
for ($j=0; $j<=$i; $j++){ //metto in ciclo $array_pulito per fare il menu a tendina
if($array_pulito[$j] != ""){ //siccome array_unique lascia spazi vuoti, mi accerto che non ci siano
echo "<option>$array_pulito[$j]</option>";
}
}
echo"</select>";
 
Ultima modifica:

Discussioni simili