Archief - PHP: array en sorteren

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Incinnerator

Legacy Member
Yu allemaal

Ik ben bezig met een ftp browser in php.

Ik lees dus de bestanden op de server door ftp_rawlist()
na enkel bewerkingen op die data heb ik een array gemaakt en die ziet er zo uit:

icoon | filename | size | extention

ik heb dit opgebouwd als volgt
PHP:
$table = array();
//en dan via een lus
$table[] = array("<img src=\"img/$icon\">","$filename","$array[4]","$extention");

maw een array met daarin een array(icoon,filename,size,extention).

Ik wil de array graag soteren op extention en binnen de extention op naam.
na meerder pogingen slaag ik er nog niet in om dit te bereiken.

Kan iemand tips geven over hoe ik mijn array moet opbouwen?
met sleutels? en welke sort functie (usort,ksort,sort,multi_sort ???)

Bedankt
Incinnerator

Jos_Albatros

Legacy Member
laat eens zien hoe je die array ($table) maakt ...

Incinnerator

Legacy Member
heb ik toch al verteld

hier is de functie

PHP:
function prepareList($ftpstream, $remotedir)
{
$content = ftp_rawlist ($ftpstream, $remotedir);
$numlist = sizeof ($content);
$table = array();
    $iteration = 0;
    
    while ($iteration < $numlist) {
    
        //verschillende delen van de ftp_rawlist bewerken
        $array = array(); //array
        $tok = strtok($content[$iteration], " "); //string verdelen op basis van spatie
        while($tok !== false)
        {
        $array[] = $tok;            //alle delen in een array steken
        $tok = strtok(" ");
        }

        //als array
        $filename = $array[8];
        $i=9;
        while(!empty($array[$i]))
        {
        $filename = $filename . " " . $array[$i];
        $i++;
        }
        ////////

        $sep = split ("-", $array[0]); //om te weten of
        $isdir = substr ($sep[0], 0, 1); // we met dir te maken hebben

        if ($isdir === "d") {

            $newdir1 = $remotedir . "/" . $filename;

            $icon = "dir.png";
            
            $table[] = array("<img src=\"img/$icon\">","<a href=main.php?newdir=$newdir1>$filename</a>","$array[4]","");
        } 
        else
        {
            $extention = getExtention($filename);
            $icon = getIcon($extention);
            
            $table[] = array("<img src=\"img/$icon\">","$filename","$array[4]","$extention");
        }
        $iteration++;
    }
    
//2dimentionale array returnen
return $table;
}
//

Jos_Albatros

Legacy Member
doe gewoon $table[$extention][] = array ("filename", "icon", "img", "filesize");

dan $table sorteren op key, dan elke array in $table "gewoon" sorteren

killgore

Legacy Member
voor op kolom te sorteren in meer-dimensionele array:

PHP:
foreach($table as $key => $value)
{
    $ext[$key] = $value[3]; //Als uw extensie het 4e element is
}
array_multisort($ext,SORT_ASC,$table);

normaal werkt dit dan voor dubbele sort, ma bij mij heeft dat nooit deftig gewerkt en dus schreef ek daar eigen sorting algoritmes voor :( (even zoeken op quicksort kan dus mssch handig zijn :)):
PHP:
foreach($table as $key => $value)
{
    $ext[$key] = $value[3]; //Als uw extensie het 4e element is
    $name[$key] = $value[2]; // als naam het 2e element is
}
array_multisort($ext,SORT_ASC,$name,SORT_ASC,$table);

edit: zoals vorige zegt uw extension als key gebruiken en dan op key sorten is ook oplossing, ma dan blijfde me probleem zitten voor 2e sort (die zou je dan met multisort kunnen doen, maar die negeert de sort van uw keys :p).
Het beste wat je kan doen is eerst sorten op ext via ingebouwde algoritmen (eerste dat ik gepost heb), dan splisen naar arrays waar extensions zelfde zijn, die apart nog eens sorten op name, en dan weer mergen ;).

owja: array_multisort behoudt keys d8 ik, dus let op als je via for($i=0,$l=sizeof($array);$i>$l;$i++) hierover gaat, dan gaat hij nog steeds ongeordend zijn.
edit: blijkbaar behoudt hij enkel volgorde als je associative keys en wijzigt hij bij genummerde keys ;).

Incinnerator

Legacy Member
bedankt voor de reacties

bij mij duurt da iets langer om het werkende te krijgen
maar het zal wel lukken uiteindelijk :)

merci
Greetz
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan