Mit PHP gleiche Werte "sortieren"

gunhero

Mitglied
Tag zusammen ...

Ich hab folgendes Problem:
Ich hab ein assoziatives Array, dass ich (logischerweise) sortieren möchte. Nehmen wir mal folgendes array an:
PHP:
array (3 => "blubb3", 3 => "blubb2", 5 => "blubb5", 6 => "blubb6", 1 => "blubb1");
Dann möchte ich nach den werten "3, 3, 5, 6, 1" sortieren lassen. Dies an sich ist kein problem. Wie man aber sieht, kommt der wert "3" doppelt vor. Wenn ich es wie folgt mache wird dann eine variable einfach überschrieben:
PHP:
$a = array (3 => "blubb3", 3 => "blubb2", 5 => "blubb5", 6 => "blubb6", 1 => "blubb1");
usort ($a, "cmp");
while (list ($key, $value) = each ($a)) 
{
$platz[$key] = $value;
}
Könnte mir nun jemand helfen, sodass die Varialben nicht überschrieben werden? also hatte das problem schon jemand bzw kann mir jemand weiterhelfen? wäre sehr dankbar ;)

im vorraus

MfG gunny
 
In dem $a-Array ist [3] nur einmal vorhanden,weil der erste Eintrag bereits dort durch den zweiten überschrieben wird... kannst es dir ja mal mit print_r($a); ausgeben lassen.

Das lässt sich auch nicht ändern, zwei gleichnamige Variablen(oder Array-Elemente) nebeneinander gibts nicht...würde auch keinen Sinn machen, denn woher sollte PHP wissen, welche der beiden du meinst, wenn du darauf zugreifen willst.

Ansonsten, wenn du nach den Schlüsseln sortieren willst, geht das mit ksort() ;)
 
*Dies ist eine automatisch genererierte Antwort auf ein Posting, welches hier gestern noch stand* :-)

In deinem Beispiel von gestern Abend,...da hast du dir die Werte ausgeben lassen....du brauchst aber die Schlüssel(Mannschaften)
Code:
<?php
$a = array ("blubb3" => 3, "blubb2" => 3, "blubb5" => 5, "blubb6" => 6, "blubb1" => 1);
arsort ($a);
echo '<table border="1">';
while (list ($key, $value) = each ($a))
{
echo '<tr><td>Team:'.$key.'</td><td>Punkte:'.$value.'</td></tr>';
}
echo '<table>';
?>

(Um die Sache zu sortieren,reicht dabei arsort() völlig aus :) )
 
noch ne frage *gg*

hallihallo ;)
etz hätte ich trotzdem noch ne frage. wie man weis wird ja die tabelle einer fußballliga nach punkten, torverhältnissen und selbst geschossenen toren sortiert. also nehmen wir an, ich hab die variablen $verein[0], $punkte[0], $tordiff[0] und $tore[0]. Wie kann ich die dann so sortieren, dass sie wie oben beschrieben (erst nach punkten, dann nach tordifferenzen, dann nach selbst geschossenen toren) sortiert werden. bzw mit welchem command ?!
ich bin momentan mal bei usort() stehengeblieben. hat mir aber nicht wirklich was gebracht ;(
würde mich über antworten freuen

mfg
gunhero
 
Da musst du "uasort()" nehmen, damit die Verbindung zu den Array-Keys(Teams) beim Sortieren beibehalten wird.
Nen Beispiel:.......Aufbau der arrays:$teamname=>array($Punkte,$Tordifferenz,$eigeneTore);
PHP:
<?php
function ranking($a,$b)
{
  if ($a[0] == $b[0])
  	{
  	if($a[1]!=$b[1])
  		{
  		return ($a[1] > $b[1]) ? -1 : 1;
  		}
  	if($a[2]!=$b[2])
  		{
  		return ($a[2] > $b[2]) ? -1 : 1;
  		}
  	return 0;
  	}
    return ($a[0] > $b[0]) ? -1 : 1;
}
$liga = array
(
"1.FC Kaiserslautern"	=>array(14,-5,17),
"1.FC Köln"		=>array(7,-14,9),
"Bayer 04 Leverkusen"	=>array(30,18,28),
"Borussia Dortmund"	=>array(23,6,25),
"Borussia M'gladbach"	=>array(10,-8,11),
"Eintracht Frankfurt"	=>array(8,-11,9),
"FC Bayern München"	=>array(27,14,30),
"FC Schalke 04"		=>array(14,-5,15),
"Hamburger SV"		=>array(15,-10,15),
"Hannover 96"		=>array(15,-9,22),
"Hansa Rostock"		=>array(12,-4,17),
"Hertha BSC Berlin"	=>array(11,-13,12),
"SC Freiburg"		=>array(18,-3,19),
"SV Werder Bremen"	=>array(31,20,37),
"TSV 1860 München"	=>array(17,-4,13),
"VfB Stuttgart"		=>array(33,19,22),
"VfL Bochum"		=>array(21,9,25),
"VfL Wolfsburg"		=>array(18,0,26)
);
uasort ($liga,'ranking');

echo '<table border="1">';
while (list ($key, $value) = each ($liga))
{
echo '<tr><td>'.$key.'</td><td>'.$value[0].'</td><td>'.$value[1].'</td><td>'.$value[2].'</td></tr>';
}
echo '<table>';
?>
 
Zuletzt bearbeitet:
ich bedanke mich dafür ;)
ich werde etz mal den code genauer anschaun ... vielleicht verstehe ich ihn dann auch ...

also
HERZLICHEN DANK

;)

mfg
gunhero
 
Zurück