| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

07-09-2009, 14:43
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
array_multisort in zwei Ebenen?
Guten Tag liebe Skriptkollegen =)
Ich habe ein pikantes Problem und versuchen diesem mit der Funktion array_multisort Herr zu werden, was aber leider nicht klappt…
Mein Array sieht folgendermaßen aus:
PHP-Code:
$arr = array( 0 => array( 'id' => 1, 'char' => array( 'name' => 'Berta' ), ), 1 => array( 'id' => 2, 'char' => array( 'name' => 'Anton' ) ) );
Mein Ziel ist es, das Array so zu sortieren, dass es nach dem $arr[$i]['char']['name'] sortiert wird, sodass bei:
PHP-Code:
foreach ($arr as $row) { echo $row['char']['name'].', '; }
aus Berta, Anton, dieses wird: Anton, Berta,
Ist das möglich oder sollte ich gleich mein Skript umschreiben, um es irgendwie anders zu lösen?
Mit meinem Wissen und der Doku über array_multisort komme ich auf jeden Fall nicht weiter
Hoffe jemand hat eine rettende Idee
Geändert von ApoY2k (07-09-2009 um 14:45 Uhr)
|

07-09-2009, 16:02
|
|
deathcakeman
Registrierter Benutzer
|
|
Registriert seit: Aug 2006
Beiträge: 134
|
|
Mit array_multisort() wirst du hier, meiner Meinung nach, nicht weit kommen. Da muss schon was eigenes her.
Als Beispiel:
PHP-Code:
$arr = array( array('id' => 1, 'char' => array('name' => 'Hans')), array('id' => 2, 'char' => array('name' => 'Gerd')), array('id' => 3, 'char' => array('name' => 'Berta')), array('id' => 4, 'char' => array('name' => 'Anton')), array('id' => 5, 'char' => array('name' => 'Zoan')) );
function KeySwap($sort_array) { for($i = 0; $i < sizeof($sort_array); $i++) { for($j = $i + 1; $j < sizeof($sort_array); $j++) { $res = strnatcasecmp($sort_array[$i]['char']['name'], $sort_array[$j]['char']['name']); if($res > 0) { $tmp = $sort_array[$i]; $sort_array[$i] = $sort_array[$j]; $sort_array[$j] = $tmp; } } } return $sort_array; }
$arr = KeySwap($arr);
foreach($arr as $row) { echo $row['char']['name'].', '; }
//Ausgabe: Anton, Berta, Gerd, Hans, Zoan,
Mit ein bisschen Nachdenken kein Problem
__________________
*blubb*
Geändert von deathcakeman (07-09-2009 um 16:17 Uhr)
|

07-09-2009, 16:58
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Wow, mit so einer Antwort hätte ich nun nicht gerechnet. Meistens bleibtst bei RTFM stehen ;-)
Dennoch vielen Dank für deine Mühe, wohl grade Langeweile gehabt oder ist das Problem so einfach? Wie dem auch sei, ich kannte die Funktion strnatcasecmp() bisher noch nicht, vielleicht wäre ich mit dieser auch von alleine darauf gekommen.
Ich meine aber zu verstehen, wie deine Funktion funktioniert. Sehe ich das richtig, dass sie sozusagen das Array durchläuft und immer zwei Einträge miteinander vergleicht und sie dann neu einsortiert, je nachdem ob sie vor oder nach dem vorigen stehen sollten?
(Ich will schließlich auch verstehen, was mein Code macht…)
|

07-09-2009, 17:59
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Da krige ich ja Pickel, wenn ich sowas kompliziertes sehe....
Meine Alternative:
*
PHP-Code:
<?php error_reporting(-1); ini_set('display_errors', TRUE);
$arr = array( array('id' => 1, 'char' => array('name' => 'Hans')), array('id' => 2, 'char' => array('name' => 'Gerd')), array('id' => 3, 'char' => array('name' => 'Berta')), array('id' => 4, 'char' => array('name' => 'Anton')), array('id' => 5, 'char' => array('name' => 'Zoan')) ); $sorter = function($a,$b) { return strnatcasecmp($a['char']['name'], $b['char']['name']); } ; usort($arr,$sorter);
?> <pre> <?php var_export($arr) ?> </pre>
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|