Hallo,

Ik had een vraag. Ik heb namelijk een script die alle mappen uit de zelfde directory laat zien en er een hyperlink van maakt:
<?php
if ($dir = @opendir(".")) {
while (false!==($file = readdir($dir))) {
if ($file != "." && $file != "..") {
echo "<br><B>".substr($file, 0, 1)."</B><hr>";
echo "<a href='".$file."'>".$file."</a>";
}
}
closedir($dir);
}
?>

Nu wou ik graag het rangschikken op de beginletter (functie: substr($file, 0, 1)).
Nu krijg ik dus boven elke map de beginletter te zien. Deze beginletter mag natuurlijk maar 1x laten zien worden. Het eindresultaat zou zoiets moeten komen er uit te zien:

A
-----------------------
aiddblabla
alibi
allemaal

B
----------------------
Boom
b...

C
----------------------
Citroen
Cinema

etc.etc.

Alvast hartelijk dank,
Melroy van den Berg
ok eens zien :)

[code]
<?php
if ($dir = @opendir(".")) {
while (false!==($file = readdir($dir))) {
if ($file != "." && $file != "..") {
$file_array[] = $file;
}
}
closedir($dir);
}

//file_array orderen op alfabet =>
sort($file_array);
reset($file_array);
$tmp_first_letter = "";
foreach ($file_array as $file) {

$first_letter = strtolower(substr($file, 0, 1));


if ($first_letter != $tmp_first_letter) {
echo "<br><B>".$first_letter."</B><hr>";
$tmp_first_letter = $first_letter;
}
echo $file;
}



?>

edit => ; vergeten
tmp_first_letter uit de foreach gegooid sry
Ik vind het een beetje rare code...
probeer sowieso dit eens.

<?php
if ($dir = @opendir(".")) {
    //while (false!==($file = readdir($dir))) { // is gelijk aan $file = readdir($dir)
    // dus:
    $files = array();
    while($file = readdir($dir)) {
    // nu gaan we alles in een array douwen
        if ($file != "." && $file != "..") {
            array_push($files, $file);
        }
    }
    sort($files);
    // bestanden zijn nu gesorteerd op alfabetische volgorde
    foreach($files as $key => $waarde) {
        // nu moeten we dus kijken bij welke waarde hij hoort...
        // wat een oplossing kan zijn een multidemensionale array. Maar dat moet makkelijker kunnen.
        // Dus ik laat het even open
    }
    closedir($dir);
}
?>

Jason => rare code ?

is gewoon een flag variable in je script gooien ;)

stel je hebt

ahha => tmp_first_letter = A => header printen
abba => tmp_first_letter = A => header niet printen
abbc => tmp_first_letter = A => header niet printen
bbba => tmp_first_letter = B => header printen
Ceret => tmp_first_letter = C => header printen
Bedankt.

Maar.. :(
@Tommy bij jouw script

Eerst sorteerde hij eerst beter op alfabet? En ik krijg boven elke map met een beginletter a een a te zien.

Oftewel:

a
-----------------------------------------------------
admin

a
-----------------------------------------------------
apache

a
-----------------------------------------------------
alfa


In plaats van:

a
-----------------------------------------------------
admin
apache
alfa
enz.
ik zie het al. $tmp_first_letter zat in de lus en kreeg altijd = "" mee aan het begin van de lus. Gewoon buiten de lus gooien en alles werkt ok !

zie edit !
bedankt!

<?php
if ($dir = @opendir(".")) {
while (false!==($file = readdir($dir))) {
if ($file != "." && $file != "..") {
$file_array[] = $file;
}
}
closedir($dir);
}
//sort($file_array);
//reset($file_array);
$tmp_first_letter = "";
foreach ($file_array as $file) {

$first_letter = strtolower(substr($file, 0, 1));


if ($first_letter != $tmp_first_letter) {
echo "<br><B>".$first_letter."</B><hr>";
$tmp_first_letter = $first_letter;
}
echo "<a href='".$file."'>".$file."</a><BR>";
}
?>

Raar genoeg moest ik sort() en reset() uitschakelen, want daardoor werkt het juist niet alfabetisch gesorteerd? (geen idd wat hij dan wel deed?)
nu ja :)
Het werkt...
kan met een gerust hart gaan slapen :)

enjoy the script ;)
Whaha, Tommy, mijnes is vier regels korter :)

@Melroy: dit is ook een handige methode, mijns inziens ;)

<?php
if ($dir = @opendir(".")) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
$file_array[ucfirst(substr($file, 0, 1))][] = $file;
}
}
closedir($dir);
}

ksort($file_array);

foreach ($file_array as $letter => $woorden) {
echo '
<h2>'.$letter.'</h2>
<hr />
'.implode('<br />'.PHP_EOL, $woorden);
}
?>
edit: laat maar

Reageren