Autor | Zpráva | ||
---|---|---|---|
johnl Profil |
#1 · Zasláno: 30. 11. 2009, 11:35:48 · Upravil/a: johnl
Dobrý den chtěl bych se zeptat zda je možné když budu vypisovat soubory z adresáře např.
$slozka = dir("./"); while($file=$slozka->read()) { if ($file=="." || $file=="..") continue; $pole = explode("<!+!>", file_get_contents("./".$file."")); echo "Soubor ".$file." má speciální číslo "$pole[2]""; } $slozka->close(); tak je řadit nějakým zvláštním způsobem, např. že proměná $pole[2] bude obsahovat číslo a soubory se budou řadit podle toho ve kterém souboru je toto číslo největší - takže soubory které toto číslo budou mít největší budou nahoře a soubory s nejnišším dole. Vůbec nevím jestli to jde udělat proto budu rád za každou radu - pokud to jde ;-) |
||
Radek9 Profil |
#2 · Zasláno: 30. 11. 2009, 12:44:20 · Upravil/a: Radek9
johnl:
$array = array(); ... $array[$pole[2]] = $file; ... arsort($array); Popřípadě si to nějak uprav, pokud je více stejných čísel. Teď mě ještě napadlo: $array = array(); ... $array[$file] = $pole[2]; ... asort($array); ... foreach($array as $key => $val){ echo $key;//vypíše název souboru. } |
||
Majkl578 Profil |
#3 · Zasláno: 30. 11. 2009, 13:24:53 · Upravil/a: Majkl578
Jít by to mělo, prvně se načtou do pole, to se poté seřadí a nakonec vypíše.
Raději než dir využívám DirectoryIterator, než explode bych raději regexp, popř. něco hezčího. Zkus tedy toto, nevím ale jak dobře ti to bude fungovat, neotestoval jsem celé, neměl jsem na čem. :) $dir = new DirectoryIterator(dirname(__FILE__)); $files = array(); while ($dir->valid()) { if (!$dir->isDot() && $dir->isFile()) { //pokud je polozka soubor preg_match('~.*\<\!\+\!\>.*\<\!\+\!\>(.*)\<\!\+\!\>.*~U', file_get_contents($dir->getFilename()), $matches); if (isset($matches[0])) {//pokud existuje udaj o pozici $files[$matches[0]] = $dir->getFilename(); } } $dir->next();//posune se na dalsi soubor } sort($files);//seradit soubory $files = array_reverse($files);//otocit poradi - od nejvetsiho foreach ($files as $identifier => $file) { 'Soubor "' . $file . '" má speciální číslo "' . $identifier . '"' . "\n"; } |
||
johnl Profil |
#4 · Zasláno: 30. 11. 2009, 16:42:48
Majkl578:
Vyzkoušel jsem to a skončilo to chybou „Warning: file_get_contents(slozka) [function.file-get-contents]: failed to open stream: Permission denied in C:\xampp\htdocs\*****\***\index.php on line 6“ Řádek 6 preg_match('~.*\<\!\+\!\>.*\<\!\+\!\>(.*)\<\!\+\!\>.*~U', file_get_contents($dir->getFilename()), $pole); Jak to můžu opravit? |
||
Majkl578 Profil |
#5 · Zasláno: 30. 11. 2009, 16:56:43
Juj, spletl jsem tam negaci při přepisu podmínky. Teď by to mělo jít.
|
||
johnl Profil |
#6 · Zasláno: 30. 11. 2009, 18:10:46
Teď když jsem to poupravil tak to vypisuje soubory z adresáře ./ (tam ten script je) ale měl by vypisovat z adresáře slozka/ - pokud se nepletu?
$dir = new DirectoryIterator(dirname("slozka/")); $files = array(); while ($dir->valid()) { if (!$dir->isDot() && $dir->isFile()) { //pokud je polozka soubor $matches = explode("<!+!>", file_get_contents($dir->getFilename())); $files[$matches[17]] = $dir->getFilename(); } $dir->next();//posune se na dalsi soubor } sort($files);//seradit soubory $files = array_reverse($files);//otocit poradi - od nejvetsiho foreach ($files as $identifier => $file) { echo "$file" . "\n"; } |
||
Majkl578 Profil |
#7 · Zasláno: 30. 11. 2009, 18:58:07
To dirname tam nemá co dělat. DirectoryIterator bere argument složku.
new DirectoryIterator('./slozka/'); |
||
johnl Profil |
#8 · Zasláno: 30. 11. 2009, 19:12:44 · Upravil/a: johnl
Tak když už to konečtně funguje - v této podobě
$dir = new DirectoryIterator("slozka/"); $files = array(); while ($dir->valid()) { if (!$dir->isDot() && $dir->isFile()) { //pokud je polozka soubor $matches = explode("<!+!>", file_get_contents("slozka/".$dir->getFilename()."")); $files[$matches[17]] = $dir->getFilename(); } $dir->next();//posune se na dalsi soubor } sort($files);//seradit soubory $files = array_reverse($files);//otocit poradi - od nejvetsiho foreach ($files as $identifier => $file) { echo "$file" . "\n"; } Tak to stejně nefunguje protože se stane to že všechny souboru mají to číslo úplně stejné - podle toho prvního souboru.. :( |
||
Majkl578 Profil |
#9 · Zasláno: 30. 11. 2009, 20:06:22 · Upravil/a: Majkl578
[#8] johnl
Aha, já počítal s tím, že každý soubor má unikátní hodnotu. Zkus toto: $dir = new DirectoryIterator($path = './slozka/'); $files = array(); while ($dir->valid()) { if (!$dir->isDot() && $dir->isFile()) { //pokud je polozka soubor $matches = explode("<!+!>", file_get_contents($path . $dir->getFilename())); $files[$dir->getFilename()] = $matches[17]; } $dir->next();//posune se na dalsi soubor } uasort($files, 'usortCb');//seradit soubory foreach ($files as $file => $id) { echo "$id > $file" . "\n"; } function usortCb($a, $b) { return $a == $b ? 0 : ($a > $b ? -1 : 1); } Případně zkus lépe popsat problém - jaká situace nastává / může nastat. |
||
johnl Profil |
#10 · Zasláno: 30. 11. 2009, 21:11:41
[#9] Majkl578
Už to funguje tak jak má - Děkuju za pomoc ;-) |
||
Časová prodleva: 14 let
|
0