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ř.
1$slozka = dir("./"); $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
|
||
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. :) 1$dir = new DirectoryIterator(dirname(__FILE__)); $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); 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?
1$dir = new DirectoryIterator(dirname("slozka/")); $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/'); 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ě
1$dir = new DirectoryIterator("slozka/"); $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: 1$dir = new DirectoryIterator($path = './slozka/'); $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: 15 let
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0