readdir(): Sortierproblem mit array_multisort()

readdir(): Sortierproblem mit array_multisort()

am 29.06.2006 14:43:48 von Peter Wittenberger

Hallo NG,

ich lese Dateien eines Verzeichnisses via readdir()ein. Diese schiebe
ich in ein Array. Über die Variable $sor möchte ich nun nach Datum, Name
oder Größe sortieren. An sich klappt dies auch; es wird nach dem
gewünschten Kriterium sortiert. Allerdings wird nach dem Sortieren in
der Ansicht nur die Datumsspalte sortiert - die Namen und Größe bleiben
gleich. Oder wenn ich den Namen sortiere - dies geschieht, aber das
zugehörige Datum oder Größe bleiben in der Liste unverändert. Das
heisst, dass nach dem Sortieren die Zugehörigkeit Name->Datum->Größe
nicht mehr zusammenpassen.

Wie immer: Bevor ich solch einen Post schreibe bin ich am verzweifeln. Help.

Gruss,
Peter


Code:

....

$data = array('0' => array(),'1' => array(),'2' => array());
while ($datei = readdir ($handle)) {
if($datei != "." && $datei != "..") {
$data['1'][] = $datei;
$data['0'][] = filemtime($pfad . "/" . $datei);
$data['2'][] = filesize($pfad."/".$datei);
}
}
closedir($handle);

/* Standard SORT ==> DATE */
array_multisort($data['0'], SORT_DESC);

if($sor=='1')
{
array_multisort($data['0'], SORT_DESC);
}

if($sor=='2')
{
array_multisort($data['0'], SORT_ASC);
}
for ($i = 0; $i < count($data[0]); $i++) {

$dateidatum = date("H:i:s d.m.Y", $data[0][$i]);
$dateiname = $data[1][$i];
$size = $data[2][$i];
runden($size);

// echo der Liste.... //
}

Re: readdir(): Sortierproblem mit array_multisort()

am 30.06.2006 08:24:28 von Peter Wittenberger

Peter Wittenberger schrieb:
> Hallo NG,
>
> ich lese Dateien eines Verzeichnisses via readdir()ein. Diese schiebe
> ich in ein Array. Über die Variable $sor möchte ich nun nach Datum, Name
> oder Größe sortieren. An sich klappt dies auch; es wird nach dem
> gewünschten Kriterium sortiert. Allerdings wird nach dem Sortieren in
> der Ansicht nur die Datumsspalte sortiert - die Namen und Größe bleiben
> gleich. Oder wenn ich den Namen sortiere - dies geschieht, aber das
> zugehörige Datum oder Größe bleiben in der Liste unverändert. Das
> heisst, dass nach dem Sortieren die Zugehörigkeit Name->Datum->Größe
> nicht mehr zusammenpassen.
>
> Wie immer: Bevor ich solch einen Post schreibe bin ich am verzweifeln.
> Help.
>
> Gruss,
> Peter
>
>
> Code:
>
> ...
>
> $data = array('0' => array(),'1' => array(),'2' => array());
> while ($datei = readdir ($handle)) {
> if($datei != "." && $datei != "..") {
> $data['1'][] = $datei;
> $data['0'][] = filemtime($pfad . "/" . $datei);
> $data['2'][] = filesize($pfad."/".$datei);
> }
> }
> closedir($handle);
>
> /* Standard SORT ==> DATE */
> array_multisort($data['0'], SORT_DESC);
>
> if($sor=='1')
> {
> array_multisort($data['0'], SORT_DESC);
> }
>
> if($sor=='2')
> {
> array_multisort($data['0'], SORT_ASC);
> }
> for ($i = 0; $i < count($data[0]); $i++) {
>
> $dateidatum = date("H:i:s d.m.Y", $data[0][$i]);
> $dateiname = $data[1][$i];
> $size = $data[2][$i];
> runden($size);
>
> // echo der Liste.... //
> }


Hat keiner eine Idee?

Grussle,
Peter

Re: readdir(): Sortierproblem mit array_multisort()

am 30.06.2006 13:35:24 von Peter Wittenberger

Frank Schenk schrieb:
> ...
> Deine Ordnung mit dem 0,1,2 macht nicht wirklich Sinn, lass uns jeden
> Eintrag als einen hash behandeln mit den keys datei, size, time
>
> Dazu noch usort() und fertig.
> ...
> ...
> hth, Frank

Habe fertig: Kapiert & klappt! Danke Dir!

Grussle,
Peter

Re: readdir(): Sortierproblem mit array_multisort()

am 30.06.2006 14:16:46 von Peter Wittenberger

Frank Schenk schrieb:
> Peter Wittenberger wrote:
> function cmpSize($a, $b){
> if($a['size'] == $b['size']){
> return 0;;
> }
> return ($a['size'] < $b['size']) ? -1 : 1;
> }
> ...
>
> hth, Frank

Hallo Frank,

noch ein Nachtrag/Frage zur DESC-ASC Sortierung.
Aufgrund Deiner Funktion habe ich folgendes verbrochen:

// ASC //
function cmpSizeAsc($a, $b){
if($a['size'] == $b['size']){
return 0;;
}
return ($a['size'] < $b['size']) ? -1 : 1;
}

// DESC //
function cmpSizeDesc($a, $b){
if($a['size'] == $b['size']){
return 0;;
}
return ($a['size'] > $b['size']) ? -1 : 1;
}

Dies klappt auch - bei der Dateigröße. Wie bekomme ich
über das gleiche (ähnliche) Prinzip eine auf- und absteigende
Sortierung für den Namen hin?

Nochmals Danke,
Peter