Ankündigung

Einklappen
Keine Ankündigung bisher.

array_map mit Argumenten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array_map mit Argumenten

    Hi,

    bin gerade am Überlegen wie ich am schnellsten Elemente eines Arrays mit einer Funktion durchlaufe, allerdings soll diese Funktion mehrere Parameter akzeptieren. Konkretes Beispiel: mysql_real_escape_string

    array_map('mysql_real_escape_string', $values);

    Schön und gut, leider kann ich mysql_real_escape_string() jetzt nicht noch die Connection mitübergeben. Was eine Schleife ist weiß ich

    array_walk mit einer create_function wäre vielleicht auch möglich, muss aber auf eine private Objekteigenschaft innerhalb dieser Funktion zugreifen können (den Connection-Link eben).


  • #2
    Hallo Zergling,

    das Problem hatte ich auch, allerdings habe ich die Escape-Funktion dann in die MySQL-Klasse eingebettet. Da ich sowieso mit einer persistenten Verbindung arbeite, war die Verfügbarkeit des Objekts kein Problem.
    PHP-Code:
    array_map(array('DB_MySQL','escapeString'),$this->aPost);

    class 
    DB_MySQL... {

    __construct() {
    //...
    }
    public function 
    escapeString($sString) {

                if(
    get_magic_quotes_gpc()) {

               
    $sString        stripslashes($sString);

                } else {

               
    $sString       $sString;

                }

           
    $sString = @mysql_real_escape_string($sString);

           return 
    $sString;

          }

    So, ich hoffe, dass ich jetzt nicht komplett an dir vorbeigeschrieben hab.

    Gruß


    *EDIT:
    Habe eben noch kurz bei php.net vorbeigeschaut:
    http://de.php.net/manual/en/function...-map.php#56190

    Da gibts die Funktion array_smart_map - die eigentlich einen anderen sinn hat, aber könnte man nicht einfach diese Funktion so manipulieren, dass der erste übergebene Parameter die aufzurufende Funktion - und die nächsten Parameter die Argumente sein sollen, die in die Funktion geschmissen werden sollen? Ich glaube, das wär' einen Versuch wert!

    Kommentar


    • #3
      spricht irgendwas dagegen array_walk () zu benutzen ?
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Code:
        public function escapeString($sString)
        wird hier zu einem Fehler führen, da die Übergabe eines Arrays die statische Verwendung einer Funktion einer Klasse impliziert...
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design before you start to write code!
        2. Discuss and review it together with experts!
        3. Choose good tools (-> Adventure PHP Framework (APF))!
        4. Write clean and reusable software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar


        • #5
          wird hier zu einem Fehler führen, da die Übergabe eines Arrays die statische Verwendung einer Funktion einer Klasse impliziert...
          Hallo dr.e, Deinen Einwand verstehe ich nicht ganz. Es wird doch gar kein Array übergeben!

          Kommentar


          • #6
            Ich versteh das Problem immer noch nicht richtig. Kannst Du noch 'was konkreter werden Zergling?
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              array_walk ist mir etwas suspekt, eventuell hülfen mir Reflections, ich werde mal drüberschauen, wahrscheinlich hilft mir aber auch schon die von pepe24 genannte array_smart_map() Funktion, mal schauen. Ich melde mich.

              Kommentar


              • #8
                Zitat von Zergling
                eventuell hülfen mir Reflections,
                heißt das nicht hülften ?

                Ich weiß zwar nicht, ob Du das meinst, aber zumindest in php 4 funktioniert das so:

                PHP-Code:
                <?

                class dyn
                  {
                  var $p=5;

                  function do_walk (& $a)
                    {
                    $a = $a + $this->p;
                    }

                  function do_map ($a)
                    {
                    return ($a + $this->p);
                    }
                  }

                $dyn = new dyn;

                $array = array (1,2,3,4);

                // mit array_map
                print_r (array_map (array ($dyn , 'do_map') , $array));

                // mit array_walk
                array_walk ($array , array ($dyn , 'do_walk'));
                print_r ($array);
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  Hallo nikosch77,

                  naja, das ist ja mehr oder minder genau das beispiel, das ich gemacht habe!
                  Was Zergling braucht ist noch ein zusätzliches Funktionsargument für die (in diesem Falle) do_map / do_walk Funktion. (jedenfalls nach meinem Verständnis seines Problems.)

                  Gruß

                  Kommentar


                  • #10
                    Sorry, Du hast natürlich recht. Aber:
                    bool array_walk ( array &array, callback funcname [, mixed userdata] )
                    Deswegen auch meine Frage nach dem eigentlichen Problem. Außer dem Unbehagen, das array_walk () Zergling offenbar bereitet.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar

                    Lädt...
                    X