Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mit PHP Array sotieren (https://www.delphipraxis.net/91249-mit-php-array-sotieren.html)

ferby 2. Mai 2007 11:20


Mit PHP Array sotieren
 
Hallo,

gibt es in PHP eine fertige Funktion mit dem ich folgenden Array sotieren kann.

$Array["Name"]["Punkte"]

Der Array soll nach den Punkten sotiert werden,
also zum Beispiel aus

Alex 10
Mike 20
Toni 5
Susi 14

soll dann


Mike 20
Susi 14
Alex 10
Toni 5


werden.

mkinzler 2. Mai 2007 11:25

Re: Mit PHP Array sotieren
 
sort() bzw usort()

CCRDude 2. Mai 2007 11:26

Re: Mit PHP Array sotieren
 
Die Mehrdimensionalität deiner Definition sehe ich im Beispiel jetzt nicht, aber allgemein: einfach mal auf de.php.net gehen und nach "array sorting" suchen ;)
Dann findest Du z.B. array_multisort oder usort, mit Beispielen.

ferby 2. Mai 2007 13:41

Re: Mit PHP Array sotieren
 
Hallo,

also ich blicke bei PHP noch nicht ganz durch :wall:

Ich versuche gerade meine eigene Funktion zu schreiben, die das ganze sotieren soll.

Hier mein PHP Source:

Code:
<html>

<head>
</head>

<body>
<?
   function swap_zwei_dim_array($pos1,$pos2, &$INI)
   {
     $Temp=$INI;
     $INI["Eventpunkte"][$pos1."P"]=$Temp["Eventpunkte"][$pos2."P"];
     $INI["Eventpunkte"][$pos2."P"]=$Temp["Eventpunkte"][$pos1."P"];
     $INI["Eventpunkte"][$pos1."N"]=$Temp["Eventpunkte"][$pos2."N"];
     $INI["Eventpunkte"][$pos2."N"]=$Temp["Eventpunkte"][$pos1."N"];
   }
   
   // Lade INI
   $INI = parse_ini_file("Eventpunkte.ini", true);
   $Anzahl=$INI["Eventpunkte"]["UserAnzahl"];
   
   // Sotieren
   for ($i=1; $i<$Anzahl-1; $i++)
   for ($i2=$Anzahl-1; $i2>=$i; $i2--)
   if ($INI["Eventpunkte"][$i2."P"] < $INI["Eventpunkte"][($i2+1)."P"])
   swap_zwei_dim_array($i2, $i2+1, $INI);
   
   // Ausgeben
    echo "Eventpunkte\n";

   echo "<table>\n";
   echo "<td>\n\n";   
      
    for($i=1; $i<$Anzahl+1; $i++)
    echo sprintf("%02d",$i).". ".$INI["Eventpunkte"][$i."N"]."
\n";

    echo "</td>\n\n";

    echo "<td>\n";
    echo "  \n";
    echo "</td>\n\n";

    echo "<td>\n\n";

    for($i=1; $i<$Anzahl+1; $i++)
    echo "".$INI["Eventpunkte"][$i."P"].""."
\n";

   echo "</td>\n";
   echo "</table>\n\n";
?>

</body>
</html>
Wobei die Datei Eventpunkte.ini so aufgebaut ist:

Code:
[Eventpunkte]
UserAnzahl=10
1N=Ferby
1P=20
2N=Begonia
2P=10
3N=Lovemydoom
3P=5
4N=Shimiru
4P=4
5N=Durkhoom
5P=3
6N=Saliva
6P=2
7N=Berdugo
7P=1
8N=Saruelron
8P=5,5
9N=Lizinia
9P=1,5
10N=Bloodmira
10P=18

Das Programm sotiert teilweiße, allerdings enstehen immer wieder Fehler...
Wenn ich an den Weten etwas änder, dann passt es manchmal, und manchmal nicht.
Leider finde ich meinen Fehler nicht.

Blickt hier wer soweit durch, das er den Fehler findet?

ferby 5. Mai 2007 14:37

Re: Mit PHP Array sotieren
 
Hat hier wirklich keiner eine Idee wo sich der Fehler eingeschlichen haben könnte?

Khabarakh 5. Mai 2007 15:06

Re: Mit PHP Array sotieren
 
Warum benutzt du nicht einer der oben genannten Funktionen? Ein Bubblesort ist nicht gerade für seine Schnelligkeit bekannt und ein selbstgeschriebener, schlecht optimierter und fehlerhafter erst recht nicht.

ferby 5. Mai 2007 15:12

Re: Mit PHP Array sotieren
 
Hallo,

weil ich das mit den oben gennanten Funktionen nicht hinbekomme....
habe schon gegoogelt, aber sogut wie alle Funktionen, die ich gefunden habe, Funktionieren nicht mit einen 2-Dimensionalen Array,
bzw sind zu komplex für mich.

Bubbelsort mag zwar nicht gerade die beste sein, ist aber die einfachste.
Und da ich noch ein PHP Newb bin, würde ich gerne die Funktion verstehen die ich benütze.

yankee 5. Mai 2007 15:20

Re: Mit PHP Array sotieren
 
puhh... Also du würdest uns das Leben leichter machen, wenn du einmal
print_r($<array to sort>);
machst, dir den Quelltext im Browser ansiehst (damit die Zeilenumbrüche und Einrückungen noch da sind) und hier reinpostest. Ich bin mir näcmlich immernoch nicht im klaren, wie deine Datenstruktur aussieht und was sortiert werden soll ;-).

3_of_8 5. Mai 2007 16:43

Re: Mit PHP Array sotieren
 
Sortiere erst alle Teil-Arrays durch und dann sortiere das Haupt-Array mit usort, wobei du den höchsten Wert der Subarrays vergleichst:

Code:
$foo sei ein 2-dimensionales Array

function cmparray($a, $b)
{
  return ($a[sizeof($a)-1]<$b[sizeof($b)-1])?-1:($a[sizeof($a)-1]>$b[sizeof($b)-1])?1:0;
}

//...

for ($i=0; $i<sizeof($foo)); $i++)
{
  sort($foo[$i]);
}

usort($foo, cmparray);
EDIT: ups, Denkfehler. So funktioniert das natürlich nicht.

cruiser 5. Mai 2007 16:43

Re: Mit PHP Array sotieren
 
evtl. bringt dich das ja weiter: PHP-Doku: array_multisort


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz