Multidimensionales Array sortieren...kleiner Denkanstoß gesucht...

QUEST08

Erfahrenes Mitglied
Hallo nochmal,

suche nun eine Möglichkeit das Array korrekt zu sortieren.

Code:
Array
(
    [0] => Array
        (
            [partner_url] => test1.de
            [hits_heute] => 0
            [hits_gesamt] => 3
        )

    [1] => Array
        (
            [partner_url] => test2.de
            [hits_heute] => 1
            [hits_gesamt] => 2
        )

    [2] => Array
        (
            [partner_url] => test3.de
            [hits_heute] => 0
            [hits_gesamt] => 2
        )

)

Jetzt würde ich gerne zuerst nach Hits heute, anschließends nach hits gesamt und zu guter letzt nach partner_url sortieren. welche möglichkeit gibt es da?

Habe das ganze schon folgendermaßen versucht:
PHP:
usort($partner, sortier_funktion);

function sortier_funktion($a, $b) { 
return strnatcasecmp($a["hits_gesamt"],$b["hits_heute"]);
}

$i=0;
while($i<=2){
echo $partner[$i]["hits_heute"]." / ".$partner[$i]["hits_gesamt"]." / ".$partner[$i]["partner_url"]."<br>";
$i++;
}

Jedoch passt das leider nicht wirklich. HAt da jemand zufällig paar Minuten Zeit für das Problem?
 
Hey yaslaw,
danke für den Hinweis, hatte den mittels (pflichtgemäß wie ich bin) Boardsuche bereits in einem anderen Beitrag von dir gefunden.

Hab mir das bereits angeguckt und was soll ich sagen - ich versteh ihn nicht. Es erscheint mir so, als ob ich damit nur einzelne Werte der "Unterarrays" rauslöse und die neusortiere - wie da am Ende das Beispielergebnis rauskommt, kann ich nicht nachvollziehen.

In stumpfer Anwendung des Beispiels habe ich auch bereits versucht, das nachzubauen... leider erfolglos.

Ich lese verschiedene RSS-Feeds aus, schreibe einzelne Daten (z.B.: link, author, pubDate) der letzten drei Einträge in einen gemeinsamen Array und will den dann entsprechend des pubDates sortieren, damit ich die aktuellen drei Einträge aller Feeds ausgeben kann.

PHP:
//Struktur des Arrays
$postARRAY = array(
 array(pubDate, title, author, link, channel-title, channel-link), #Eintrag 1 Quelle 1
 array(pubDate, title, author, link, channel-title, channel-link), #Eintrag 2 Quelle 1
 array(pubDate, title, author, link, channel-title, channel-link), #Eintrag 3 Quelle 1
 array(pubDate, title, author, link, channel-title, channel-link), #Eintrag 1 Quelle 2
 array(pubDate, title, author, link, channel-title, channel-link), #Eintrag 2 Quelle 2
 array(pubDate, title, author, link, channel-title, channel-link) #Eintrag 3 Quelle 2
);

und wie es dann weitergeht... ein großes Fragezeichen...

Evtl. noch einen kleinen Tip für mich?

Eric
 
Zuletzt bearbeitet:
item: Was ist das für ein Array? Das sind 6 Unterarrays mit allen denselben Konstanten drin

Also, du machst Arrays mit allen Feldern nach denen du sortieren willst. Diese gibst du dem Multisort als Argument mit und Voila, sortiert ist
PHP:
<?php
//Ich will aufsteigend nach pubDate und Absteigend nach title sortieren
$data = array(
 array('pubDate' => 1, 'title' => '1', 'result' => '1'),
 array('pubDate' => 4, 'title' => '4', 'result' => '5'),
 array('pubDate' => 4, 'title' => '5', 'result' => '4'),
 array('pubDate' => 3, 'title' => '3', 'result' => '3'),
 array('pubDate' => 3, 'title' => '7', 'result' => '2')
);  

foreach($data as $key => $item){
    $pubDates[$key] = $item['pubDate'];
    $titles[$key] = $item['title'];
}

array_multisort($pubDates, SORT_ASC, $titles, SORT_DESC, $data);
print_r($data);

?>
 
Hey yaslaw,
die "Konstanten" sollten eigentlich nur verdeutlichen, wie die Struktur ist. Die Unterarrays werden aus nem RSS-Feed mit Daten befüllt und sind dann natürlich unterschiedlich. Ansonsten würde das echt keinen Sinn machen. ;)

Auf jeden Fall klappt es jetzt! Vielen, vielen Dank! :)


@alle anderen die evtl. mal verschiedene RSS-Feed-Einträge in ein Array schreiben wollen, ums dann zu sortieren: pubDate aus'm Feed mittels strtotime() in einen UNIX-Zeitstempel umwandeln und danach dann das Array sortieren.
 
Zurück