Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen nach Wert mit PHP sortieren ?
tschekowski 20-01-2005, 21:50 Hi,
Kann man Variablen die verschiedene Werte besitzen mit einem PHPBefehl sortieren und kann man gleichzeitig sagen das z.B nur die 3 höchsten ausgegeben werden sollen ?
penizillin 20-01-2005, 21:54 jo, würde gehen.
dein ansatz dazu?
sehe ich auch kein Problem ... :dontknow:
ich frage mich:
- was für Variablen?
- welche Werte?
- wie sortieren?
So könnte deine Funktion aussehen :teach: (hoffe, dass ich deine Frage richtig verstanden habe) :
<?php
$max_outputs=5; // Wie viele Ausgeben
$sortierwerte='1;8;3;2;8;22;12'; //Zu sortierende Werte
$sortierarray=array();
$sortierarray=explode(';',$sortierwerte); // Werte in ein Array lesen
arsort($sortierarray); // in absteigender Reihenfolge sortieren
//$sortierarray=asort($sortierarray); // in aufsteigender Reihenfolge sortieren
while(list(,$val) = each($sortierarray)){
$i++;
echo $val . "<br>"; // Sortierte Werte ausgeben
// Wenn maximale Ausgabe erreicht, dann raus aus der Schleife
if($i>=$max_outputs) exit;
}
?>
by TobiaZ: Jaja, vernünftig zu kommentieren ist soooo schwer!
tschekowski 21-01-2005, 17:48 also ich habe folgendes vor:
Ich habe eine Reihe von Arrays - ein Wert des Arrays ist eine summe aus mehreren Preisen. Jetzt will ich die 7 höchsten summen mit php sortieren und ausgeben - gleichzeitig aber die anderen werte des ursprungsarrays beibehalten - ist das möglich ? wenn ja wie sieht eine solche Sortierung aus ?
(mit der von FloMX kann ich leider nichts anfangen weil die in einem array zusammengefügt sind und dann dort sortiert werden)
penizillin 21-01-2005, 17:56 der flo darf erstmal seinen code umbrechen.
tschekowski - zeig mal beispieldaten, um dein vorhaben zu verdeutlichen.
tschekowski 21-01-2005, 18:02 also über eine datenbankabfrage wird für jeden meiner artikel die gesamtsumme berechnet - die dabei herauskommenden arrays enthalten die artikelnummer und die summe
also z.B $a010[summe] und $a010[artikelnummer] wobei a10 die artikelnummer ist - jetzt will ich unter allen ausgelesenen arrays die 7 höchsten summen heraussuchen und sowohl die summe als auch die artikelnummer ausgeben lassen - wie könnte man das verwirklichen ?
penizillin 21-01-2005, 18:08 <pre>
<?php
$a1 = array("summe"=>21, "id"=>1);
$a2 = array("summe"=>11, "id"=>2);
$a3 = array("summe"=>27, "id"=>3);
$a4 = array("summe"=>13, "id"=>4);
$toSort = array($a1, $a2, $a3, $a4);
array_multisort($toSort, SORT_DESC);
print_r($toSort);
//enthält nun die arrays in der reihenfolge (nach 'id')
//3, 1, 4, 2
//bleibt noch die ausgabe der ersten n elemente,
//aber eine schleife kannst du auch selbst basteln
?>
</pre>
tschekowski 21-01-2005, 20:29 irgendwie verzweifle ich langsam an meinem script.....
$result = mysql_query ("SELECT * FROM Artikeldaten");
if (mysql_errno())
echo mysql_error();
//$artikel[Artnr] wird über diese abfrage definiert - für jeden artikel anders
while ($artikel = mysql_fetch_array ($result))
{
$artikelvergesamt='WERT WIRD ÜBER DATENBANKABFRAGE KORREKT ZUGEORDNET';
$a = array("summe"=>$artikelvergesamt, Artnr=>$artikel[Artnr]);
//WERT zurücksetzen
$artikelvergesamt=0;
}
ich will jedem einzelnen artikel ein array zuordnen - dann alle array sortieren und die 7 höchsten nach summe sortierten arrays ausgeben......wer kann mir helfen?
(die sort funktion fehlt noch)byTobiaZ: Umbrüche sind schon schwer...
penizillin 22-01-2005, 15:13 ich habe dir gezeigt, wie man mit multisort vorankommt, nun musst du schon selbst was tun..
$artikelvergesamt - mir sagt der name dieser variable gar nichts.
$a wird in jedem zyklus überschrieben. fülle es mit $a[].
tschekowski 22-01-2005, 17:39 $artikelvergesamt ist die summe nach der sortiert werden soll.
gibt es eine möglichkeit bei jedem schleifendurchlauf eine neue variable zu bekommen die man dann sortiert ?
hab es zuerst mit $a.$x versucht wobei $x durchgezählt wird - dann bekomme ich wenn ich z.B $a10[summe] ausgeben lasse kein ergebnis)
penizillin 22-01-2005, 17:54 mach ein mehrdimensionales array draus, wird einfacher zu sortieren sein.
tschekowski 22-01-2005, 17:58 d.h alles in ein array ?
wie unterscheide ich dann die verschiedenen summen bzw. artnr ?
penizillin 22-01-2005, 18:00 weißt du, wie ein multidimensionales array aussieht?
tschekowski 22-01-2005, 18:04 kann sein - aber der begriff sagt mir leider nichts.....
penizillin 22-01-2005, 18:08 na dann - rtfm (http://de3.php.net/manual/de/language.types.array.php)!
tschekowski 22-01-2005, 18:38 $result = mysql_query ("SELECT * FROM Artikeldaten");
$x=0;
if (mysql_errno())
echo mysql_error();
while ($artikel = mysql_fetch_array ($result)) {
$x=$x+1;
//definiert $artikelvergesamt (funktioniert)
for ($x=1; $x<16; $x++)
{$var='Menge_'.$x;
$var2='Preis_'.$x;
$var4='Artnr_'.$x;
$result2=mysql_query("SELECT SUM($var*$var2) FROM Bestellungsdaten WHERE $var4 like '$artikel[Artnr]'");
$var3 = mysql_result ($result2, 0);
$artikelvergesamt=$var3+$artikelvergesamt;
}
$aaa = array ("summe" => array("$x" => "$artikelvergesamt"),
"Arnr" => array("$x" => "$artikel[Artnr]"),
);
//Wert zurücksetzen
$artikelvergesamt=0;
}
in diesem fall wird das array ja immer überschrieben - wie kann ich es erreichen, dass für jede artikelnummer ein neuer eintrag in summe und artnr für das bestehende array gemacht wird ?
penizillin 22-01-2005, 18:41 lies nochmal meine message, die zweite von oben auf dieser seite.
letzte zeile.
p.s. du hast immer noch das recht, deinen code umzubrechen, horizontal scrollen ist krebserregend.
Und brich deine Queries um, habe keinen Bock das immer für dich tun zu müssen.
tschekowski 22-01-2005, 18:47 fülle es mit $a[]
was ist damit gemeint und wie kann ich das in meinem fall anwenden ?
penizillin 22-01-2005, 18:49 hint:$a = array();
$a[] = "a";
$a[] = "b";
//nun enthält $a:
0 => "a"
1 => "b"
tschekowski 22-01-2005, 18:54 ich glaub ich hab das array korrekt gefüllt:
$result = mysql_query ("SELECT * FROM Artikeldaten");
$x=0;
if (mysql_errno())
echo mysql_error();
while ($artikel = mysql_fetch_array ($result)) { $x=$x+1;
//definiert $artikelvergesamt (funktioniert)
for ($x=1; $x<16; $x++)
{$var='Menge_'.$x;
$var2='Preis_'.$x;
$var4='Artnr_'.$x;
$result2=mysql_query("SELECT SUM($var*$var2) FROM Bestellungsdaten WHERE $var4 like '$artikel[Artnr]'");
$var3 = mysql_result ($result2, 0);
$artikelvergesamt=$var3+$artikelvergesamt;
}
$a[summe][$artikel[Artnr]]=$artikelvergesamt;
//Wert zurücksetzen
$artikelvergesamt=0;
}
print_r($a);
jetzt fehlt nur noch das sortieren und das ausgeben.....
ich bräuchte die ausgabe der Artikelnummern bei den x höchsten summen - wie geht das bei einem multidimensionalen array ?
raus kommt jetzt sowas wie artikelnummer => summederartikelnummer
PS: das ist doch alle mit umbrüchen hier - ich muss nicht nach rechts scrollen
penizillin 22-01-2005, 18:57 break the lines and press any key to continue...
tschekowski 22-01-2005, 18:58 bei mir steht das da zeile für zeile.......was meinst du denn genau?
ich glaub ich ignoriere diesen thread mal, wie du meine hinweise...
penizillin 22-01-2005, 19:13 1024x768 und ich muss scrollen.
ok ist das nicht.
wenn du größere auflösung hast - nimm rücksicht.
tschekowski 22-01-2005, 19:40 $result = mysql_query ("SELECT * FROM Artikeldaten");
$x=0;
if (mysql_errno())
echo mysql_error();
while ($artikel = mysql_fetch_array ($result)) { $x=$x+1;
//definiert $artikelvergesamt (funktioniert)
for ($x=1; $x<16; $x++)
{$var='Menge_'.$x;
$var2='Preis_'.$x;
$var4='Artnr_'.$x;
$result2=mysql_query("SELECT SUM($var*$var2) FROM
Bestellungsdaten WHERE $var4 like '$artikel[Artnr]'");
$var3 = mysql_result ($result2, 0);
$artikelvergesamt=$var3+$artikelvergesamt;
}
$a[summe][$artikel[Artnr]]=$artikelvergesamt;
//Wert zurücksetzen
$artikelvergesamt=0;
}
print_r($a);
so jetzt passts, oder ?
penizillin 22-01-2005, 19:45 du verstehst es nur, wenn du bei dir die auflösung kurz runtersetzst und dir diese seite anguckst, oder?
penizillin 22-01-2005, 19:47 übrigens, immer noch das gleiche rtfm, und zwar im abschnitt "do's and don't's" oder sowas, nämlich im bezug auf keynamen. es geht um die (single)quotes um die namen rum.
und mein hint hast du immer noch nicht umgesetzt.
|