n Felder an Funktion übergeben?
Björn Lindner
- php
Hi,
ich habe n Felder, die an eine Funktion übergeben werden sollen.
Ich habe die Möglichkeit einer Übergabe eines Textstrings und
den Aufruf eine for-Schleife innerhalb des Funktionsaufrufes
erwogen. Beides waren keine so tollen Ideen.
Hier kurz der Code:
$sort_string = '$show_auftrag, SORT_NUMERIC';
for ($x=1; $x<=$merke_count_felder; $x++) {
sort_string = $sort_string.', $show_auftrag['.$x.']';
}
echo "$sort_string";
array_multisort($sort_string);
Wer hat damit schon Erfahrungen gemacht und kann mir helfen?
Björn
Moin
ich habe n Felder, die an eine Funktion übergeben werden sollen.
Ich habe die Möglichkeit einer Übergabe eines Textstrings und
den Aufruf eine for-Schleife innerhalb des Funktionsaufrufes
erwogen. Beides waren keine so tollen Ideen.
Ich habe zwar deine etwas wirre Frage und den Zusammenhang zu deinem Beispielcode nicht verstanden, aber vielleicht möchtest du dich mit http://www.php.net/manual/de/function.func-get-args.php anfreunden.
--
Henryk Plötz
Grüße aus Berlin
Hi,
Ich habe zwar deine etwas wirre Frage und den Zusammenhang zu deinem Beispielcode nicht verstanden, aber vielleicht möchtest du dich mit http://www.php.net/manual/de/function.func-get-args.php anfreunden.
Sorry für die wirre Fragestellung.
array_multisort() verlangt innerhalb der Klammern die arrays, die sortiert werden sollen.
In meinem Fall sähe das dann so aus:
array_multisort(array[0], array[1], ..., array[n])
Da ich jetzt aber nicht genau weiß, wieviele arrays ich jetzt gerade habe, kann ich es nicht fest eingeben.
Deshalb dachte ich mir, ich baue eine for-Schleife und bastel mir damit den String zusammen.
Leider sieht das dann wie beschrieben aus und array_multisort($string) ergibt eine Fehlermeldung, weil $String ein String ist und kein Array, was er sortieren kann.
Die Funktion ...get_arg gibt leider nur innerhalb einer Funktion die übergebenen Variablen wieder.
Referenzen scheinen mir auf den ersten Blick auch nicht weiter zu helfen.
Vielleicht ist alles jetzt etwas eindeutiger.
Bin weiterhin für Lösungsvrschläge zu haben ;)
Björn
Moin
Also du hast n Arrays in $bla[0] bis $bla[n-1] und willst sie alle nach dem selben Kriterium sortieren? a) Warum verwendest du multisort und b) was hast du gegen
foreach($bla as $key => $value) array_multisort($bla[$key], SORT_NUMERIC);
?
--
Henryk Plötz
Grüße aus Berlin
Hi,
foreach($bla as $key => $value) array_multisort($bla[$key], SORT_NUMERIC);
Weil der String dann eigentlich folgend aussehen muss:
array_multisort($bla[0], SORT_NUMERIC, $bla[1], ..., $bla[n])
Aus folgendem Grund: 0=ID, 1-n sind Textfelder, welche sich auf die ID bezihehen. Ich kann diese also nicht einzeln sortieren, sondern alle mit einmal.
MFG Björn
Hallo,
ich habe n Felder, die an eine Funktion übergeben werden sollen.
Ich habe die Möglichkeit einer Übergabe eines Textstrings und
den Aufruf eine for-Schleife innerhalb des Funktionsaufrufes
erwogen. Beides waren keine so tollen Ideen.
Deinen Beispielcode hab ich, wie Henryk, auch nicht verstanden. Aber ich denke, Du willst einfach keine feste Zahl an Parametern für Deine Subroutinen vorgeben, sondern flexibel bleiben, oder? Dann versuch das mal mit einem referenzierten, assoziativen Array (ungetestet ausm Kopf):
<?php
$argumente = array("foo" => "1", "bar" => "abc", "baz" => "muffel");
function deineroutine(&$args) {
//--------------------^ Das Symbol für Referenzen
foreach ($args as $key => $value) {
echo "$key : $value";
}
}
deineroutine($argumente);
?>
Hier wird das Array $argumente an die Routine "deineroutine" per Referenz übergeben. Innerhalb der Routine ist das übergebene Array mit $args ansprechbar. Das Beispiel gibt alle übergebenen Argumente als Schlüssel/Wert-Paare aus.
Lies hierzu unbedingt den Abschnit "Referenzen" in der PHP-Doku!
Viele Grüsse,
Achim
Hi,
Lies hierzu unbedingt den Abschnit "Referenzen" in der PHP-Doku!
werde mich dem annehmen.
Allerdings ist die Funktion array_multisort() eine PHP-Funktion, da kann ich also schlecht drinnen etwas schreiben.
Ich les aber nochmal die Referenzen.
THX erstmal.
Björn
Hi,
Allerdings ist die Funktion array_multisort() eine PHP-Funktion, da kann ich also schlecht drinnen etwas schreiben.
Ich les aber nochmal die Referenzen.
ach so! Ich dachte, es geht um Eigenbaufunktionen. Da bist Du mit Deiner Lösung gar nicht so weit weg denk ich. Du kannst Dir erst mal einen String zusammenbauen, der den Befehl multisort() samt seiner Parameterliste enthält. Der String muss halt so aussehen, wie Du ihn in Deinem Editor eingeben würdest. Danacht kannst Du das ganze mit eval($stringmitdembefehl); ausführen. Näheres zu eval() findest du natürlich auch in der PHP-Doku.
Viele Grüsse,
Achim
Hi,
auf eval bin ich auch schon gekommen.
Da erhalte ich folgende Fehlermeldung:
$show_auftrag, SORT_NUMERIC, $show_auftrag[1], $show_auftrag[2], $show_auftrag[3], $show_auftrag[4], $show_auftrag[5], $show_auftrag[6], $show_auftrag[7], $show_auftrag[8]
Parse error: parse error in /home/lindnb/public_html/infoliste/php/show_list.php(969) : eval()'d code on line 1
Warning: Argument 1 to array_multisort() is expected to be an array or a sort flag in /home/lindnb/public_html/infoliste/php/show_list.php on line 969
Was sagt mir das jetzt?
Aufegrufen habe ich das ganze mit:
array_multisort(eval($sort_string));
Hast Du da eine Idee?
MFG Björn
Hi,
Was sagt mir das jetzt?
Aufegrufen habe ich das ganze mit:
array_multisort(eval($sort_string));
also das kann schon mal nicht gehen, weil eval gültigen PHP-Code ausführen will. Du musst also den Funktionsaufruf _innerhalb_ von eval() machen:
eval( "array_multisort($foo)" );
Allerdings musst Du auch sicherstellen, dass array_multisort() die Argumente, so wie Du sie übergibst verarbeiten kann. Soweit ich das mitbekommen habe erwartet es die Übergabe von einem oder mehrerer Arrays. Dein Code sieht eher aus wie einzelne Elemente des Arrays $show_auftrag *wunder*,
Viele Grüsse
Achim
Hi,
herrlich, die erste Fehlermeldung ist weg.
$show_auftrag, SORT_NUMERIC, $show_auftrag[1], $show_auftrag[2], $show_auftrag[3], $show_auftrag[4], $show_auftrag[5], $show_auftrag[6], $show_auftrag[7], $show_auftrag[8]
Parse error: parse error in /home/lindnb/public_html/infoliste/php/show_list.php(970) : eval()'d code on line 1
Bleibt aber bei:
eval( "array_multisort($sort_string)" );
übrig.
Was bedeutet eval()'d code?
Die Arrays sind richtig. Die geb hier nur zur Orientierung mit an.
Der Parse Error ist der einzig bedenkenswerte ;)
MFG Björn
Hi,
Fehler gefunden. Es fehlte ein ; .
Ich danke Dir und hofe den "Array sizes are inconsistent" Fehler selbst beheben zu können ;)
MFG Björn
Hi,
Fehler gefunden. Es fehlte ein ; .
Ich danke Dir und hofe den "Array sizes are inconsistent" Fehler selbst beheben zu können ;)
Bitteschön!
Hat vielleicht etwas damit zu tun, dass die Arrays nicht gleich gross sind (nicht gleich viel Elemente besitzen).
Viele Grüsse
Achim