Autor Zpráva
johnl
Profil
Dobrý den, mám hodně divnej problém a nevím jak ho vyřešit :)
Takže: na www.wincre.wz.cz/web/index.php mám výpis článků který jsou v adresáři cls/data/article (tam se ale nedostanete je to v administraci) výpis adresáře mám
<?php
$slozka = OpenDir("cls/data/article/"); 
while ($soubor = ReadDir($slozka))
{
  if ($soubor == "." || $soubor == "..") continue;
  readfile ("cls/data/article/".$soubor);
  echo "<br>";
}
closedir ($slozka);
?>


při ukládání používám jako ID
$time = time();
$time = StrTr($time,"0123456789","9876543210");

(to aby to bylo od nejnovějšího po nejstarší).. Ale články se stejně blbě řadí!
Vytvářel jsem je v tomto pořadí = a1 b2 c3 d4 a2 a3 f5 g888 už mě to *****! tudíž v tomto pořadí by měli být vypsány (a1 by mělo být na konci a už mě t *****! na začátku) ale není tomu tak! Nevíte někdo proč?
DoubleThink
Profil *
The filenames are returned in the order in which they are stored by the filesystem.
..což může být jakékoliv

Standardní postup je načíst názvy do pole a to pak seřadit podle potřeby.
Radek9
Profil
My jsme se teda o tom s Johem bavili... a došli jsme k názoru, že to začíná být divný :D Protože v mém RS se to řadí úplně normálně podle názvu souborů.
johnl
Profil
Nenapadá někoho jak by se to dalo udělat tak aby se to řadilo normálně?
Radek9
Profil
Tak jme to nakonec vyřešili pomocí sort a foreach:
<?php
$slozka = OpenDir("cls/data/article/"); 
while ($soubor = ReadDir($slozka))
{
  if ($soubor == "." || $soubor == "..") continue;
  $pole[] = $soubor;
}
closedir ($slozka);
@sort($pole);
if(!empty($pole)){
foreach($pole as $file){
  readfile ("cls/data/article/".$file);
  echo "<br><br>";
}
}
?>
johnl
Profil
Takže už je to vyřešený, díky Radku9 ;-)
AM_
Profil
@sort($pole);
Co ten zavináč???
Radek9
Profil
AM:
Pokud je pole prázdné tak se sort neprovede ;-)
Mastodont
Profil
Radek9
Není lepší to šoupnout do ifu bez zavináče?
Radek9
Profil
Mastodont:
A proč se zbytečně párat s ifama, když je tohle kratší a funguje to?
Edit: Teď mě napadá, že tam ten if už je tak to zkusím :D
Edit2: Ok, není tam chyba, takže se to klidně může nacpat do toho ifu.
nightfish
Profil
imho lepší varianta...
<?php
$pole = array();
$slozka = OpenDir("cls/data/article/"); 
while ($soubor = ReadDir($slozka))
{
  if ($soubor == "." || $soubor == "..") continue;
  $pole[] = $soubor;
}
closedir ($slozka);
sort($pole);
foreach($pole as $file){
  readfile ("cls/data/article/".$file);
  echo "<br><br>";
}
?>
Radek9
Profil
nightfish:
Když myslíš.
nightfish
Profil
Když myslíš.
- nepoužívám neinicializované proměnné
- nepoužívám zavináče
- nepoužívám v tomto kontextu zbytečné konstrukty (třeba ten if)
AM_
Profil
Radek9
když je tohle kratší a funguje to?
proč se v autě připoutat, když jezdí i bez toho?
Zkrátka zavináč je v 99% případů, kde se používá, čuňárna. Existují výjimky:
1) některé funkce generují chybu, kterou nelze předem předvídat (např. připojení k MySQL) - takže pro potlačení chyby použiji zavináč, ale v těchto případech je nutné pamatovat na ruční ošetření chyby a vypsání vlastní chybové hlášky.
2) ve výjimečných případech, kde by bylo předvídání chyby neúměrně komplikované a kde se opět důsledně chyba ošetří ručně.
Ale tohle není ani jedna z nich.

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: