PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Array sortieren


Nase
2003-09-01, 22:41:02
Hi,

ich habe ein Problem mit der Sortierung eines Arrays.

Ist es möglich eine Array wie dieses
$inhalt[0] = '3;42';
$inhalt[1] = '1;0';
$inhalt[2] = '43;28';
$inhalt[3] = '12;0';
$inhalt[4] = '7;0';
$inhalt[5] = '65;2';
so zu sortieren, dass hinter sowas daraus wird
$inhalt[0] = '1;0';
$inhalt[1] = '3;42';
$inhalt[2] = '7;0';
$inhalt[3] = '12;0';
$inhalt[4] = '43;28';
$inhalt[5] = '65;2';
?

Das Beste was mir die Sortierfunktionen von PHP anbieten ist sowas als Endergebnis
12;0
1;0
3;42
43;28
65;2
7;0
Allerdings reicht mir das nicht.

Wäre für gute Ratschläge äusserst dankbar :)

Lord Nikon
2003-09-01, 23:36:59
Hi ,
lass einfach eine for Schleife laufen und vergleich in einer if abfrage die größe.Ich kenne jetzt nicht die genaue Syntax von PHP aber ich versuchs mal.

for ($i=0;$i<5;$i++)
{
if ($inhalt[$i]>$inhalt[$i+1)
{
$hilf=$inhalt[i+1];
$inhalt[i+1]=$inhalt[i];
$inhalt[i]=$hilf;
}
}

Nase
2003-09-01, 23:45:08
Nein, das funktioniert leider nicht (und nein, es liegt nicht daran, dass einige Fehler im Code von dir sind) :(

Lord Nikon
2003-09-02, 00:02:35
hmm ,versuch mal die ersten beiden Zeichen auszulesen. Bevor du das zweite Zeichen ausliest , musst du noch prüfen , ob die das Zeichen eine Zahl zwischen 0 und 9 ist. Dann kannst wieder (falls vorhanden) das 2te Zeichen dem ersten Zeichen hinzufügen. Als nächstes vergleichst du die Zahlen miteinander.

Nase
2003-09-02, 00:11:17
Also, mit dieser Schleife würde es funktionieren
for ($i = 0; $i < 6; $i++)
{
$split_array = explode(";", $inhalt[$i]);
if (strlen($split_array[0]) == 1)
{
$split_array[0] = '0' . $split_array[0];
}

$inhalt[$i] = $split_array[0] . ';' . $split_array[1];
}

rsort($inhalt);
Gibt es denn überhaupt keine andere Möglichkeit? Weil jetzt hab ich ja wieder ein führende 0 vor einstelligen Zahlen, die ich im nächsten Schritt wieder entfernen muss.

Nase
2003-09-02, 00:35:49
Ich merke gerade, dass dieses Script auch nur für Zahlen funktioniert, die maximal zweistellig sind. Wenn ich das jetzt auf eine variable Zeichenlänge ausdehnen möchte, wird der Code dafür immer länger und länger, dass kann es nicht sein.
Hat vielleicht jemand noch einen anderen Vorschlag?

MadMan2k
2003-09-02, 23:01:06
damit er sie dir richtig sortiert musst du zuertst die Strings in Zahlen umwandeln
(int)$deinevariable
ich weiß jetzt nicht, ob es auch mit 2Zahlen pro Vektor geht, aber mit einer klappt es auf jeden fall.
Wenn es nicht klappt musst du entweder die Zahlen einzeln schreiben oder aber mit einer for schleife den Vektorinhalt überprüfen ob das aktuelle Zeichen ";" ist und dann anhand dieser angabe den Substring lesen.

Nase
2003-09-03, 00:58:11
Puh, das wird mir dann aber doch zuviel Scriptarbeit. Ich habe das Problem jedoch jetzt anders gelöst. Ist viel einfacher und funktioniert auch mit Sicherheit besser.

Aber trotzdem Danke.

MadMan2k
2003-09-03, 23:21:40
äh.. und wie?

Nase
2003-09-03, 23:28:42
Dazu müsste ich dir schon mein ganzes Vorhaben schildern. Ich sag mal so, das Array was ich erstellen wollte, gehörte zu einem Votesystem. Die erste Zahl vor dem Semikolon war die Anzahl der Gesamtstimmen, die zweite Zahl die ID des Votes. Es ging nun darum, an die Gesamtstimmenzahl zu kommen, in Verbindung mit der ID.
Gelöst habe ich das Problem, indem ich nun letztendlich die Gesamtstimmmenzahl mit in die Datenbank schreibe. Vorher habe ich mich nur gegen diesen Schritt gesträubt, da ich nicht alles in der Datenbank speichern wollte. Aber bevor ich mir jetzt einen 20 Zeilen Code schreibe, der mir so ein Array sortiert, kann ich besser eine DB-Spalte dafür aufwenden.