Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Variablen nach Wert mit PHP sortieren ? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




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?

 
TobiaZ
21-01-2005, 09:17 
 
klar.

 
goth
21-01-2005, 14:27 
 
sehe ich auch kein Problem ... :dontknow:

 
telmich
21-01-2005, 14:55 
 
ich frage mich:
- was für Variablen?
- welche Werte?
- wie sortieren?

 
FloMX
21-01-2005, 16:28 
 
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.

 
TobiaZ
22-01-2005, 18:42 
 
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?

 
TobiaZ
22-01-2005, 18:58 
 
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.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:56 Uhr.