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

  • Zergling-new
    hat ein Thema erstellt array_map mit Argumenten.

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

  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • pepe24
    antwortet
    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ß

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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);

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    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.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Ich versteh das Problem immer noch nicht richtig. Kannst Du noch 'was konkreter werden Zergling?

    Einen Kommentar schreiben:


  • pepe24
    antwortet
    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!

    Einen Kommentar schreiben:


  • dr.e.
    antwortet
    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...

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    spricht irgendwas dagegen array_walk () zu benutzen ?

    Einen Kommentar schreiben:


  • pepe24
    antwortet
    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!

    Einen Kommentar schreiben:

Lädt...
X