Björn Lindner: n Felder an Funktion übergeben?

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

  1. 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

    1. 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

      1. 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

        1. 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

  2. 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

    1. 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

      1. 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

        1. 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

          1. 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

            1. 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

              1. 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

                1. 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