[PHP] readdir sorteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Hallo,

Om een lijst van templates weer te geven heb ik een functie gemaakt die de .html templates uit een directory leest. Nu doet hij die niet sorteren. Ik heb al vanalles geprobeert met asort en dan for each maar hij wil mn array niet sorteren.

Dit is wat ik heb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            // template
            $dir= "../templates/";
            chdir($dir);
            $directory = explode("/", $dir);
            if ($dir = @opendir(".")) {
                while($file = readdir($dir)) {
                    if (is_file($file)) {
                        $templateData = array(
                            'PAGTEMPLATE' => $file,
                            'SELECTED' => $file == 'index.html' ? 'selected' : ''
                        );
                        
                        $xtpl->assign("TEMPLATE", $templateData);
                        $xtpl->parse("main.form.template");
                    } // if
                } // while
            } // if


Hij plaatst in mijn template perfect alle .html bestanden uit de directory alleen dus in n onlogische volgorde. Iemand enig idee hoe dit te doen?

Groetjes!

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

"vanalles geprobeerd met asort"

Ok, wat dan precies? Het lijkt me een kleine moeite om alle .htmlt templates die je vindt in een array te zetten en deze vervolgens te sorteren. Dus wat lukte daar dan niet mee?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • twisted2000
  • Registratie: Januari 2004
  • Laatst online: 05-03-2021
Ik kreeg alleen het nummer of er werd niet gesorteerd.
Op onderstaande manier heb ik het bv geprobeerd. Ik krijg dan in mijn rijtje template alleen de nummering en zijn ze niet op nummer gesorteerd.

[code]

// template
$dir= "../templates/";
chdir($dir);
$directory = explode("/", $dir);
if ($dir = @opendir(".")) {
while($file = readdir($dir)) {
if (is_file($file)) {
$templateData = array(
'PAGTEMPLATE' => $file,
'SELECTED' => $file == 'index.html' ? 'selected' : ''
);

asort($templateData);

foreach($templateData as $key => $value)
{
$val = $value ;
}

$xtpl->assign("TEMPLATE", $val);
$xtpl->parse("main.form.template");
} // if
} // while
} // if

[\code]

Acties:
  • 0 Henk 'm!

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Als je met php5 werkt kun je eens naar de DirectoryIterator in de SPL kijken.

Volgens mij returned die het standaard op alfabetische volgorde.

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Kun je niet even een stukje van je array output hier posten? (als in, ik heb geen zin om jouw code op te slaan, aan te passen, en uit te voeren ;) ) asort zou doorgaans moeten werken.

[edit]
....als je zelf je code had gedebugged, dan had je gezien dat er in de array alleen het laatste resultaat uit de directory terug komt. Omdat je elke keer de array overschrijft. Je moet niet overschrijven, maar toevoegen aan de array. Anders valt er sowieso niks te sorteren.

Zoiets als onderstaande code werkt beter, alleen moet je dan nog iets doen met 'SELECTED', dat heb ik er uit gegooid.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?
$dir_lezen = './';
if($dir=opendir($dir_lezen)){
    while($file=readdir($dir)){
        if('.'==$file || '..'==$file )
            continue;
        if(is_dir($dir.$file))
            continue;
        if (is_file($file)) {
            echo $file;
            //hier toevoegen aan de array
            $templateData[] = $file;
        }
    }
    closedir($dir);
}
print_r($templateData);
//sorteren op alf.
asort($templateData);
print_r($templateData);

foreach($templateData as $key => $value)
{
echo $val = $value ;
}
?>

[ Voor 82% gewijzigd door Noork op 07-11-2008 14:55 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Volgens mij zit je in het wilde weg maar iets te proberen zonder te debuggen. Dat je je eigen post niet meer nakijkt (je code blok is verkeerd afgesloten) zegt ook al genoeg opzich :{

Tips:
- Leer debuggen (!)
- Hoe voeg je iets toe aan een array
- Waarom gebruik je asort op die regel? Waar bestaat je array uit dan daar?
- Leer hoe loops werken (Wat probeer je met foreach te doen in je voorbeeld, slaat kant nog wal...)
Pagina: 1