Autor Zpráva
lopikol
Profil
Mám kod:
$path = './';

$dir = opendir($path);

 while($file = readdir($dir)){

  if($file != '.' AND $file != '..' AND filetype($file) == 'dir') {
    echo "<h1><a href='http://$file.loc/'>" . ucfirst("$file") . ".loc</a></h1>";
  }
  
 } 


Rád bych ho převedl na funkci readpath(), ale tak, abych
echo "<h1><a href='http://$file.loc/'>" . ucfirst("$file") . ".loc</a></h1>";

toto měl až v html kodu.

Napsal jsem si toto, ale to vrací jen jeden prvek:
<?php

function readpath() {
$path = './';

$dir = opendir($path);

 while($file = readdir($dir)){

  if($file != '.' AND $file != '..' AND filetype($file) == 'dir') {
    return array($file, ucfirst($file));
  }
  
 } 
}

$path = readpath();

echo "<p><h1><a href='http://$path[0].loc/'>$path[1].loc</a></h1></p>";

Jozin
Profil
máš tam malinkatou chybu. Musí to vypadat takto:
<?php
function readpath($path) { //to je aby to bylo pro jakoukoli složku
 $dir = opendir($path);
 $ret = array();
 
 while($file = readdei($dir)) {
   if($file != '.' && $file != '..' && filetype($file) == 'dir')
     $ret[] = ucfirst($file);
 }
 
 return $ret;
}

var_dump(readpath('./'));
lopikol
Profil
A jak to mám ted zakomponovat na ten výpis?:
echo "<p><h1><a href='http://$path[0].loc/'>$path[1].loc</a></h1></p>";
Jozin
Profil
<?php
$path = readpath('./');
for($i=0;$i<count($path);$i+=2) {
  echo "<p><h1><a href='http://{$path[$i]}.loc/'>{$path[$i+1]}.loc</a></h1></p>";
}

ale myslím si, že nechceš $path[0] a $path[1], ale u obou 0 v tom případě bude u for místo $i+=2 toto $i++ a ve výpisu místo $i+1 jen $i
lopikol
Profil
Zkoušel jsi to? Mě to nefunguje - nic to nezobrazí!
Jozin
Profil
Všiml jsem si, že v #2 mám překlep v readdir. Nezkoušel jsem to, ale mělo by to fungovat... mrkni se na překlepy a podobně.
lopikol
Profil
Jozin: A jooo. Vypisuje to, ale problém je ted u toho foreach, jelikož to nevypíše vše a ještě to je posunuté. Mělo by to být i0 s i1 ale tady to je nějak šouplé, takže je to i1 s i2 a to k sobě nepatří.

EDIT: Tak už to mám opravené ;)

Moc díky ;)
lopikol
Profil
Ještě jedna věc. Potřeboval bych aby když tam nebude žádná složka, aby to vypsalo např "Žádný projekt neexistuje". Děkuji.
Jozin
Profil
Úpravou výpisu
<?php
$path = readpath('./');
$count = count($path);
if($count > 0) {
  for($i=0;$i<$count;$i+=2) {
    echo "<p><h1><a href='http://{$path[$i]}.loc/'>{$path[$i+1]}.loc</a></h1></p>";
  }
} else echo "Žádný projekt neexistuje.";

Nebo přímo ve funkci stejným způsobem, akorát se bude testovat, zda count $ret je větší než nula ;)
lopikol
Profil
Zkoušim si tam přidat řazení podle abecedy přesnějí asort(), ale bohužel nevim kam to napasvat. Bud to píše, že to není array a nebo to vypíše pouze jeden řádek. Upravíte to někdo prosím? Děkuji.

function readpath($path) { 
  $dir = opendir($path);
  $ret = array();
 
  while($file = readdir($dir)) {   
    if($file != '.' AND $file != '..' AND filetype($file) == 'dir')
      $ret[] = ucfirst($file);
  } 

  
  $count = count($ret);
  
  if($count > 0) {   
  
    return $ret;

  }else{
                             
    echo "<p class='empty'>&lt;/ EMPTY /&gt;</p>";
  
  }  
  
}
Alphard
Profil
Podle abecedy čeho? asort() řadí podle indexu u asociativních polí, vy ale konstrukcí $ret[] = ucfirst($file); generujete pole s výchozími číselnými indexy, nemá smysl podle nich řadit. Možná hledáte klasický sort.
lopikol
Profil
Podle abecedy těh načtených složek. např Auta, Motorky ... Takže to bude sort(), ale to stále neřeší, že nevím kam to dát, pořád mi to píše, že to očekává array.
Alphard
Profil
Tak sort() řadí pole, ukázka použítí viz manuál. Vědět, kde ve scriptu máte vytvořené pole je snad základ, malá nápověda, count() zjišťuje počet prvků v tom samém poli.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0