Multi Array sortieren
Anfänger
- php
0 Shadowcrow0 dedlfix
0 dedlfix
Hallöchen,
trotz intensiver suche bin ich zu dumm folgendes sinnvoll (ohne unterscheidung der groß- und kleinschreibung) nach value[0] zu sortieren:
<?php
$x1=array(
array('Gamer','ghgh'),
array('Karel Gott','gott'),
array('huey lois','news'),
array('ConnorMcleod','schotte'),
array('Michealo','foxidancer'),
array('Grieche','platon'),
array('lordi','lordi'),
array('al bundy','pass'),
array('hamster killer','pass'),
array('det2006','pass'),
array('ceffe66','boss'),
array('Josef Dingsbums','pass'),
array('Büscherle','bubbi'),
array('joppele','Heinkes'),
array('Voll Depp','depp'),
array('Kim Sung Il','dsfsdfsdf'),
array('Ulli Steinmaus','mausi'),
array('Rene Adler','flyer'),
array('Tobi','Adler'),
array('Winne One','Adler'),
array('Narr','Adler'),
array('future','Adler'),
array('Looser','Adler'),
array('Raser','baba'),
array('Kugelzauber','billarden'),
array('Depp','trottel'),
array('Die W zu erst','egeg'),
array('Fighter','ggws'),
array('Bulle','knaller'),
array('bw tut weh','fhdh'),
array('Minne Sänger','Heuler'),
array('Friede 15','peace'),
array('Find a Way','sdfsdgdh'),
array('Porsche','woefuj'),
array('Bergwelt','hügel'),
array('Kochdatt','never'),
array('Emma','emanze'),
array('Hitman009','hauer')
);
$x3=array();
foreach($x1 as $k => $x2)
$x3[]=$x2[0];
array_multisort($x3,SORT_STRING,$x1);
print_r($x1). "<br>";
?>
Es wird erst nach Groß- und DANACH nach Kleinbuschstaben sortiert. Vielleicht könnt ihr mir ja helfen.
Lieben Dank schon mal
'ǝɯɐu$ ıɥ
trotz intensiver suche bin ich zu dumm folgendes sinnvoll (ohne unterscheidung der groß- und kleinschreibung) nach value[0] zu sortieren:
RTFM - Beispiel#4
ssnɹƃ
ʍopɐɥs
'ǝɯɐu$ ıɥ
trotz intensiver suche bin ich zu dumm folgendes sinnvoll (ohne unterscheidung der groß- und kleinschreibung) nach value[0] zu sortieren:
RTFM - Beispiel#4
ssnɹƃ
ʍopɐɥs
Danke für Eure Antworten.
Ich hab das Beispiel#4 geben so ausprobiert:
$array_lowercase = array_map('strtolower', $x1[0]);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $x1[0]);
Aber das haut mir nun alles durcheinander.
Ich bin echt noch PHP-Anfänger und hab auch RTFM mehrfach gemacht .-(
Hi!
$array_lowercase = array_map('strtolower', $x1[0]);
Mach bitte eine Kontrollausgabe von $x1[0].
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $x1[0]);[/code]
Aber das haut mir nun alles durcheinander.
Das ist ja auch nicht sinnvoll. Such erst einmal die passenden Kleinbuchstabenwerte zusammen, dann sortiere $x1 und nicht nur $x1[0]. array_multisort() kann nicht raten, dass es $x1 sortieren soll, wenn du was anderes angibst.
(Du kommst vermutlich einfacher, doch die benutzerdefinierte Suchfunktion zu implementieren.)
Lo!
Hi!
$array_lowercase = array_map('strtolower', $x1[0]);
Mach bitte eine Kontrollausgabe von $x1[0].
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $x1[0]);[/code]
Aber das haut mir nun alles durcheinander.Das ist ja auch nicht sinnvoll. Such erst einmal die passenden Kleinbuchstabenwerte zusammen, dann sortiere $x1 und nicht nur $x1[0]. array_multisort() kann nicht raten, dass es $x1 sortieren soll, wenn du was anderes angibst.
(Du kommst vermutlich einfacher, doch die benutzerdefinierte Suchfunktion zu implementieren.)
Lo!
Ach ich gebs auf. Ich kriege das einfach nicht hin. Versuche das alles schon seit bestimmt 4 Monaten. Suche und google ohne Ende. Versuche alle sortierfunktionen usw.
Aber danke das ihr versucht habt mir Eure Hilfe zur Selbsthilfe näher zu bringen, aber ich glaube das ich es nie richtig verstehen werde
Hi!
Bitte sinnvoll zitieren, und nicht im FOTU/TOFU-Stil. Danke.
Ach ich gebs auf. Ich kriege das einfach nicht hin. Versuche das alles schon seit bestimmt 4 Monaten. Suche und google ohne Ende. Versuche alle sortierfunktionen usw.
Eine benutzerdefinierte Sortierfunktion ist doch nicht so schwer. Du musst dir nur einmal Gedanken machen und eine generische Funktion schreiben, die zwei Werte entgegennimmt und von denen das Sortierkriterium vergleicht. Das ist sogar ohne Funktionskopf nur ein Einzeiler, weil du str(case)cmp() verwenden kannst, dass bereits für alle drei Fälle (größer, kleiner, gleich) das passende Ergebnis liefert.
Versuche alle sortierfunktionen usw.
usort() dürfte nicht so schwer zu finden sein. Und Beispiel 2 ist besser auf deinen Fall zugeschnitten als die array_multisort()-Beispiele. Willst du es damit noch einmal probieren?
Lo!
Habe nun usort Bsp 2 mal versucht. Leider bekomme ich immer noch eine falsche Sortierung. Also ERST die Grossen und DANACH die Kleinen Buchstaben.
Hier mein Code:
<?php
$a=array(
array('Gamer','ghgh'),
array('Karel Gott','gott'),
array('huey lois','news'),
array('ConnorMcleod','schotte'),
array('Michealo','foxidancer'),
array('Grieche','platon'),
array('lordi','lordi'),
array('al bundy','pass'),
array('hamster killer','pass'),
array('det2006','pass'),
array('ceffe66','boss'),
array('Josef Dingsbums','pass'),
array('Büscherle','bubbi'),
array('joppele','Heinkes'),
array('Voll Depp','depp'),
array('Kim Sung Il','dsfsdfsdf'),
array('Ulli Steinmaus','mausi'),
array('Rene Adler','flyer'),
array('Tobi','Adler'),
array('Winne One','Adler'),
array('Narr','Adler'),
array('future','Adler'),
array('Looser','Adler'),
array('Raser','baba'),
array('Kugelzauber','billarden'),
array('Depp','trottel'),
array('Die W zu erst','egeg'),
array('Fighter','ggws'),
array('Bulle','knaller'),
array('bw tut weh','fhdh'),
array('Minne Sänger','Heuler'),
array('Friede 15','peace'),
array('Find a Way','sdfsdgdh'),
array('Porsche','woefuj'),
array('Bergwelt','hügel'),
array('Kochdatt','never'),
array('Emma','emanze'),
array('Hitman009','hauer')
);
function cmp($a, $b) // $a ist mein array
{
return strcmp($a[0], $b[0]);
}
usort($a,"cmp");
while (list($key, $value) = each($a)) {
echo $value[0] . "<br>";
}
?>
Hi,
Habe nun usort Bsp 2 mal versucht. Leider bekomme ich immer noch eine falsche Sortierung. Also ERST die Grossen und DANACH die Kleinen Buchstaben.
function cmp($a, $b) // $a ist mein array
{
return strcmp($a[0], $b[0]);
}
D'oh!
Manual zu strcmp:
„Beachten Sie, dass zwischen Groß- und Kleinschreibung unterschieden wird.“
Wenn du Programmieren willst, ist es ganz gut, wenn du Lesen vorher lernst.
Und jetzt schaust du mal, was das Handbuch unter „siehe auch“ noch für Funktionen vorschlägt.
MfG ChrisB
Hi,
Habe nun usort Bsp 2 mal versucht. Leider bekomme ich immer noch eine falsche Sortierung. Also ERST die Grossen und DANACH die Kleinen Buchstaben.
function cmp($a, $b) // $a ist mein array
{
return strcmp($a[0], $b[0]);
}D'oh!
Manual zu strcmp:
„Beachten Sie, dass zwischen Groß- und Kleinschreibung unterschieden wird.“Wenn du Programmieren willst, ist es ganz gut, wenn du Lesen vorher lernst.
Und jetzt schaust du mal, was das Handbuch unter „siehe auch“ noch für Funktionen vorschlägt.
MfG ChrisB
Jaaaaaaaaaaaaaaaa ich habs
function cmp($a, $b) // $a ist mein array
{
return strcasecmp($a[0], $b[0]);
}
usort($a,"cmp");
while (list($key, $value) = each($a)) {
echo $value[0] . "<br>";
}
strcasecmp war das was ich brauchte.
Ich hab gelesen. Jajajajaja :-)
Danke für den Hinweis
Hi!
trotz intensiver suche bin ich zu dumm folgendes sinnvoll (ohne unterscheidung der groß- und kleinschreibung) nach value[0] zu sortieren:
Und wenn ich dir das "intensiv" nicht glaube?
array_multisort($x3,SORT_STRING,$x1);
Im PHP-Handbuch zu array_multisort() steht zu SORT_STRING, dass die Sortierung case sensitive erfolgt. Und es steht keine Option mit insensitiver Arbeitsweise zur Auswahl.
Es wird erst nach Groß- und DANACH nach Kleinbuschstaben sortiert. Vielleicht könnt ihr mir ja helfen.
array_multisort() ist also nicht für dein Vorhaben geeignet. Verwende eine Suchfunktion mit benutzerdefinierter Vergleichsfunktion. Da kannst du ja eine case insensitive verwenden.
Lo!
Hi!
array_multisort() ist also nicht für dein Vorhaben geeignet.
Solche Aussagen kommen zustande, wenn man nicht intensiv genug nachschaut. Sie ist zwar nicht direkt falsch, aber mit dem Trick von Handbuchseiten-Beispiel #4 gibt es einen Workaround.
Lo!
'ǝɯɐu$ ıɥ
Solche Aussagen kommen zustande, wenn man nicht intensiv genug nachschaut. Sie ist zwar nicht direkt falsch, aber mit dem Trick von Handbuchseiten-Beispiel #4 gibt es einen Workaround.
Stimmt, das hatte ich schon geschrieben :-))
ssnɹƃ
ʍopɐɥs
Hi dedlsfix.
array_multisort() ist also nicht für dein Vorhaben geeignet.
Solche Aussagen kommen zustande, wenn man nicht intensiv genug nachschaut. Sie ist zwar nicht direkt falsch, [...]
Sie ist sogar ausgesprochen richtig, wenn Du mich fragst. Es gibt keinen guten Grund, array_multisort zu verwenden, um *ein* Array zu sortieren. Meines Erachtens.
Dringende Empfehlung (an Anfaenger): usort (Empfehlung kam bereits hier, die Dringlichkeit moechte ich hinzufuegen :-))
Viele Gruesse,
der Bademeister
Hi!
array_multisort() ist also nicht für dein Vorhaben geeignet.
Solche Aussagen kommen zustande, wenn man nicht intensiv genug nachschaut. Sie ist zwar nicht direkt falsch, [...]
Sie ist sogar ausgesprochen richtig, wenn Du mich fragst. Es gibt keinen guten Grund, array_multisort zu verwenden, um *ein* Array zu sortieren. Meines Erachtens.
Naja, ich habe eine Abneigung gegen diese Funktion. Nicht nur, weil sie etwas dürftig dokumentiert ist, auch anwenden lässt sie sich komisch. Aber prinzipiell kann man sie schon verwenden. Und *ein* Array liegt ja nicht vor, sondern eins mit vielen kleinen drin.
Dringende Empfehlung (an Anfaenger): usort (Empfehlung kam bereits hier, die Dringlichkeit moechte ich hinzufuegen :-))
Das ist wenigstens einigermaßen leicht durchschaubar.
Lo!
Naja, ich habe eine Abneigung gegen diese Funktion.
Ich auch.
Und *ein* Array liegt ja nicht vor, sondern eins mit vielen kleinen drin.
Es liegt nur *ein* Array vor, das sortiert werden soll. Nur wenn die vielen kleinen (simultan) sortiert werden sollten, dann waere array_multisort der Ansatz.
Das ist wenigstens einigermaßen leicht durchschaubar.
Und eleganter, wie ich finde, und - vor allem - viel flexibler.
Viele Gruesse,
der Bademeister
Hi!
Und *ein* Array liegt ja nicht vor, sondern eins mit vielen kleinen drin.
Es liegt nur *ein* Array vor, das sortiert werden soll. Nur wenn die vielen kleinen (simultan) sortiert werden sollten, dann waere array_multisort der Ansatz.
<pingelig>Jein. Ein Array, das sortiert werden soll - soweit stimme ich zu. Aber das Sortierkriterium steckt innerhalb der anderen Arrays. Die Sortierung kann also nicht nur unter Berücksichtigung des einen Arrays erfolgen.</pingelig>
Lo!
Aber das Sortierkriterium steckt innerhalb der anderen Arrays. Die Sortierung kann also nicht nur unter Berücksichtigung des einen Arrays erfolgen.
Abgesehen davon, dass 'Beruecksichtigung des einen Arrays' natuerlich die anderen einschliesst, weil sie nun mal Teil 'des einen Arrays' sind, stimme ich dem zu. Aber das widerspricht Nichts von dem, was gesagt wurde. Oder?
Moin!
Hi!
array_multisort() ist also nicht für dein Vorhaben geeignet.
Das hätte ich ja unterschrieben... :)
Solche Aussagen kommen zustande, wenn man nicht intensiv genug nachschaut. Sie ist zwar nicht direkt falsch, aber mit dem Trick von Handbuchseiten-Beispiel #4 gibt es einen Workaround.
Wann immer man zu array_multisort greifen zu müssen glaubt, ist eine benutzerdefinierte Sortierfunktion garantiert die bessere Lösung.
- Sven Rautenberg
Hi Sven.
Wann immer man zu array_multisort greifen zu müssen glaubt, ist eine benutzerdefinierte Sortierfunktion garantiert die bessere Lösung.
Hab da gerade so ein Déjà-vu. array_multisort und benutzerdefinierte Sortierfunktionen sind Lösungen verschiedener Probleme.
Viele Grüße,
der Bademeister