PHP Doku:: Wendet eine Benutzerfunktion auf jedem Element eines Arrays an - function.array-walk.html

Verlauf / Chronik / History: (50) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzVariablen- und typbezogene ErweiterungenArraysArray Funktionenarray_walk

Ein Service von Reinhard Neidl - Webprogrammierung.

Array Funktionen

<<array_walk_recursive

array>>

array_walk

(PHP 4, PHP 5)

array_walkWendet eine Benutzerfunktion auf jedem Element eines Arrays an

Beschreibung

bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )

Wendet die mittels funcname angegebene Benutzerfunktion auf jedes Element von array an.

array_walk() ist nicht von dem internen Arrayzeiger von array betroffen. array_walk() geht ungeachtet der Zeigerposition das gesamte Array durch.

Parameter-Liste

array

Das Eingabe-Array.

funcname

Typischerweise akzeptiert funcname zwei Parameter. Der Wert von array wird als erster übergeben, und der Schlüssel/Index als zweiter.

Hinweis:

Wenn funcname direkt mit den Werten des Arrays arbeiten soll, spezifizieren Sie den ersten Parameter von funcname als Referenz. Dann werden alle Änderungen an diesen Elementen direkt in dem originalen Array durchgeführt.

Nur die Werte von array können geändert werden. Die Struktur des Arrays kann nicht geändert werden, d.h. dass der Programmierer keine Elemente hinzufügen oder löschen kann und dass die Reihenfolge der Elemente nicht geändert werden kann. Falls die Callback-Funktion diese Anforderung nicht beachtet, ist der Verhalten dieser Funktion nicht definiert und auch nicht vorhersagbar.

userdata

Wenn der optionale Parameter userdata angegeben ist, wird er als dritter Parameter dem Callback funcname übergeben.

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Fehler/Exceptions

Sollte die Funktion funcname mehr als die ihr übergebenen Parameter benötigen, wird bei jedem Aufruf von funcname durch array_walk() eine Fehlermeldung der Stufe E_WARNING generiert. Diese Warnmeldungen können unterdrückt werden, indem man dem Funktionsaufruf von array_walk() den Operator @ voranstellt, oder error_reporting() verwendet.

Beispiele

Beispiel #1 array_walk()-Beispiel

<?php
$fruits 
= array("d" => "Zitrone""a" => "Orange""b" => "Banane""c" => "Apfel");

function 
test_alter(&$item1$key$prefix)
{
    
$item1 "$prefix$item1";
}

function 
test_print($item2$key)
{
    echo 
"$key$item2<br>\n";
}

echo 
"Vorher ...:\n";
array_walk($fruits'test_print');

array_walk($fruits'test_alter''Frucht');
echo 
"... und nachher:\n";

array_walk($fruits'test_print');
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Vorher ...:
d. Zitrone
a. Orange
b. Banane
c. Apfel
... und nachher:
d. Frucht: Zitrone
a. Frucht: Orange
b. Frucht: Banane
c. Frucht: Apfel

Siehe auch

  • array_walk_recursive() - Wendet eine Benutzerfunktion rekursiv auf jedes Element eines Arrays an
  • iterator_apply() - Call a function for every element in an iterator
  • create_function() - Erzeugen einer anonymen / temporären (Lambda-Stil) Funktion
  • list() - Weist Variablen zu, als wären sie ein Array
  • each() - Liefert das aktuelle Paar (Schlüssel und Wert) eines Arrays und rückt den Arrayzeiger vor
  • call_user_func_array() - Call a user function given with an array of parameters
  • array_map() - Wendet eine Callback-Funktion auf die Elemente von Arrays an
  • Informationen über den Callback-Typ
  • foreach


31 BenutzerBeiträge:
- Beiträge aktualisieren...
op_adept at yahoo dot co dot uk
2.12.2010 12:20
Prefix array values with keys and retrieve as a glued string, the original array remains unchanged. I used this to create some SQL queries from arrays.

<?php

function array_implode_prefix($outer_glue, $arr, $inner_glue, $prefix=false){
   
array_walk( $arr , "prefix", array($inner_glue, $prefix) );
    return
implode($outer_glue, $arr);
}

function
prefix(&$value, $key, array $additional){
   
$inner_glue = $additional[0];
   
$prefix = isset($additional[1])? $additional[1] : false;
    if(
$prefix === false) $prefix = $key;

   
$value = $prefix.$inner_glue.$value;
}

//Example 1:
$order_by = array("3"=>"ASC", "2"=>"DESC", "7"=>"ASC");
echo
array_implode_prefix(",", $order_by, " ");
//Output: 3 ASC,2 DESC,7 ASC

//Example 2:
$columns = array("product_id", "category_id", "name", "description");
$table = "product";

echo
array_implode_prefix(", ", $columns, ".", $table);
//Output:product.product_id, product.category_id, product.name, product.description

//Example 3 (function prefix) won't really be used on its own
$pre= "vacation";
$value = "lalaland";
prefix($value, $pre, array("."));
echo
$value;

//Output: vacation.lalaland

?>
AskApache
30.10.2010 9:27
Here's a handy function that illustrates using an array_walk that uses a create_function as the callback which in turn uses another array_walk with another create_function that outputs the global variables pretty-print style.

Note that by using $g=array() as the first arg for array_walk it isn't necessary to declare the array beforehand.

Other notes:  ob_start, (print), and array_walk all return true on success which is how the if processing works.

Using <?php !!$array; ?> returns true only if sizeof array is greater than 0, just a shortcut for <?php if(sizeof($array)>0);?> ... more in the php manual section on booleans.

The output is meant to be displayed inline on a page so the htmlspecialchars is called on the output.  The output is buffered by ob_start and is then output by echoing the return of ob_get_clean(), which returns the buffer and cleans the buffer.

DEBUG would need to be a defined constant for this to execute, personally I like to
<?php
if($_SERVER['REMOTE_ADDR']=='MYSTATICIPADDRESS') askapache_global_debug();
//or
if($_SERVER['REMOTE_ADDR']=='MYSTATICIPADDRESS') define('DEBUG',TRUE);
?>

<?php

function askapache_global_debug()
{
array_walk(
 
$g=array('_GET','_POST','_COOKIE','_SESSION','_ENV','_SERVER'),
  
create_function('$n','global $$n;
    if(
      !!$$n
      && ob_start()
      && (print "( $"."$n )\n")
      && array_walk($$n,
       create_function(\'&$v,$k\', \'echo "[$k] => $v\n";\'))
     )
    echo "<pre>".htmlspecialchars(ob_get_clean())."</pre>";'
  
)
);
}   
if(
DEBUG) askapache_global_debug();

?>
matthew at codenaked dot org
2.09.2010 20:24
Using lambdas you can create a handy zip function to zip together the keys and values of an array. I extended it to allow you to pass in the "glue" string as the optional userdata parameter. The following example is used to zip an array of email headers:

<?php

/**
 * Zip together the keys and values of an array using the provided glue
 *
 * The values of the array are replaced with the new computed value
 *
 * @param array $data
 * @param string $glue
 */
function zip(&$data, $glue=': ')
{
    if(!
is_array($data)) {
        throw new
InvalidArgumentException('First parameter must be an array');
    }

   
array_walk($data, function(&$value, $key, $joinUsing) {
       
$value = $key . $joinUsing . $value;
    },
$glue);
}

$myName = 'Matthew Purdon';
$myEmail = 'matthew@example.com';
$from = "$myName <$myEmail>";

$headers['From'] = $from;
$headers['Reply-To'] = $from;
$headers['Return-path'] = "<$myEmail>";
$headers['X-Mailer'] = "PHP" . phpversion() . "";
$headers['Content-Type'] = 'text/plain; charset="UTF-8"';

zip($headers);

$headers = implode("\n", $headers);
$headers .= "\n";

echo
$headers;

/*
From: Matthew Purdon <matthew@example.com>
Reply-To: Matthew Purdon <matthew@example.com>
Return-path: <matthew@example.com>
X-Mailer: PHP5.3.2
Content-Type: text/plain; charset="UTF-8"
*/
?>
arekandrei at yandex dot ru
3.01.2010 16:30
You can use lambda function as a second parameter:

<?php
array_walk
($myArray, function(&$value, $key){
   
// if you want to change array values then "&" before the $value is mandatory.
});
?>

Example (multiply positive values by two):

<?php
$myArray
= array(1, 2, 3, 4, 5);

array_walk($myArray, function(&$value, $index){
    if (
$value > 0) $value *= 2;
});
?>
rustamabd at gmail dot com
13.12.2009 15:32
Don't forget about the array_map() function, it may be easier to use!

Here's how to lower-case all elements in an array:

<?php
    $arr
= array_map('strtolower', $arr);
?>
Zigbigidorlu
6.10.2009 19:45
I tried this function to create safe SQL arrays when I'm creating query strings from keywords, but I found it to be too bulky for my purposes.  So, instead I created this function:

<?php

 
//Create a SQL safe array
 
function mysql_safe_array($array)
 {
   
$array = array();
    foreach(
$array as $item)
    {
       
$safe = mysql_real_escape_string($item);
       
array_push($array,$safe);
        unset(
$safe);
    }
    return
$array;
 }

 
//Example usage
 
$keywords = explode(" ",$_GET['keywords']);

 
$keywords = mysql_safe_array($keywords);

 
$query_s = implode("%' AND `field` LIKE '%",$keywords);
 
$query = "`description` LIKE '%$query_s%'";
 
$query = stripslashes(implode(" ",$query));
?>
erelsgl at gmail dot com
4.03.2009 12:40
If you want to unset elements from the callback function, maybe what you really need is array_filter.
jab_creations_-at_-yahoo_-dot-_com
27.11.2008 1:08
Unfortunately I spent a lot of time trying to permanently apply the effects of a function to an array using the array_walk function when instead array_map was what I wanted. Here is a very simple though effective example for those who may be getting overly frustrated with this function...

<?php
$fruits
= array("Lemony & Fresh","Orange Twist","Apple Juice");

print_r($fruits);
echo
'<br />';

function
name_base($key)
{
 
$name2 = str_replace(" ", "_", $key);
 
$name3 = str_replace("&", "and", $name2);
 
$name4 = strtolower($name3);
 echo
$name4.'<br />';
 return
$name4;
}
echo
'<br />';

$test = array_map('name_base', $fruits);
$fruits_fixed = $test;
echo
'<br />';
print_r($fruits_fixed);
?>
peterzuzek AT gmail DOT com
16.11.2008 18:04
I had some problems using this function - it didn't want to apply PHP-defined functions. So I decided to write my own - here it is. I had to use some generic-programming skills, didn't really checked the speed (I think it could be slow)... I believe it could be much better, but I don't know, how - well, I guess multiple array support and recursion would be nice. So?

Prototype:
bool arrayWalk(array &$arry, callback $callback, mixed $params=false)

<?php

   
function arrayWalk(&$arry, $callback, $params=false) {
       
$P=array(""); // parameters
       
$a=""; // arguement string :)

       
if($params !== false) { // add parameters
           
if(is_array($params)) { // multiple additional parameters
               
foreach($params as $par)
                    {
$P[]=$par; }
            }
            else
// just one additional
               
{ $P[]=$params; }
        }

        for(
// create the arguement string
           
$i=0; isset($P[$i]); ++$i
       
)
            {
$a.='$'.chr($i + 97).', '; } // random argument names

       
$a=substr($a, 0, -2); // to get rid of the last comma and two spaces

       
$func=create_function($a, 'return '.$callback.'('.$a.');'); // the generic function

       
if(is_callable($func)) {
            for(
// cycle through array
               
$i=0; isset($arry[$i]); ++$i
           
) {
               
$P[0]=$arry[$i]; // first element must be the first argument - array value
               
$arry[$i] = call_user_func_array($func, $P); // assign the new value obtained by the generic function
           
}
        }
        else
            { return
false; } // failure - function not callable

       
return true; // success!
   
} // arrayWalk()

?>

One big problem I've noticed so far - for example, if you wanted to use str_replace on the array, you'd fail - simply because of the arguement order of str_replace, where the string modified is the third arguement, not the first as arrayWalk requires.

So, still some work left...
diyism
31.10.2008 8:18
When i pass the third parameter by reference in php5.2.5,
happened this: Warning: Call-time pass-by-reference has been deprecated - argument passed by value...

And to set allow_call_time_pass_reference to true in php.ini won't work, according to http://bugs.php.net/bug.php?id=19699   thus to work around:

<?php
array_walk
($arrChnOut, create_function('&$v, $k, $arr_rtn', 'if ($k{0}!="_") {$arr_rtn[0]["_".$v[\'ID\']]=$v; unset($arr_rtn[0][$k]);}'), array(&$arrChnOut));
?>
diyism
22.10.2008 13:04
Although the manual warned you not to unset element, but sometimes thus is very useful and work as charm:

<?php
$arrChnOut
=array(0=>array('ID' => '13',
                         
'ChannelName' => 'Computers'
                        
),
                
1=>array('ID' => '17',
                         
'ChannelName' => 'Computers'
                        
),
                
2=>array('ID' => '18',
                         
'ChannelName' => 'Computers'
                        
),
                );
array_walk($arrChnOut, create_function('&$v, $k, $arr_rtn', 'if ($k{0}!="_"){$arr_rtn["_".$v[\'ID\']]=$v;unset($arr_rtn[$k]);}'), &$arrChnOut);
var_export($arrChnOut);
?>
example at user dot com
7.09.2008 5:10
On array_walk and create_function used within a class scope - Anonymous functions are out of scope.  So, if you want to access $this within the anonymous function, you'd have to pass it through the third parameter...

<?php

// example copies all values into $this where key is the same as property name

array_walk($array, create_function('$v,$k,&$that', 'if (property_exists($that,$k)) {$that->$k = $v;}'), $this);

// or, switch it around and array_walk the object

array_walk($this, create_function('&$v,$k,$array','if (array_key_exists($k,$array)) {$v = $array[$k];}'), $array);

?>
harmor
9.05.2008 21:23
I just wanted a function to trim all the array elements.  Here is a non-recursive version:

<?php
$data
= array('       a',' b','    c        d   ');

function
_trim(&$value)
{
   
$value = trim($value);   
}

function
array_trim($arr)
{
   
array_walk($arr,"_trim");
    return
$arr;
}

$arr = array_trim($data);

echo
'<pre>';
var_dump($arr);
echo
'</pre>';

$single = implode(' ',$arr);

echo
'<pre>';
var_dump($single);
echo
'</pre>';
?>

Output:

array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(10) "c        d"
}

string(14) "a b c        d"
mike >> mike AT debitage.com
6.03.2008 21:01
<?php
  
/**
    *    class.ArrayTool.php lets you search an array based on key => value pairs
    *
    *   @version 1.0
    *   @ 1-11-2008
    *   @author Mike Volmar
    *
    *    Object for converting between array key and value
    *
    */   

class ArrayTool {

    var
$mydata = array();
    var
$flag = 0;
    var
$results;
   
    function
ArrayTool(){

    }
   
    function
tellAll(){
       
print_r($this->mydata);
    }
   
    function
setArray($data){
       
$this->mydata = $data;
    }

    function
getKey($input){
        foreach(
$this->mydata as $key => $value){
            if((
$this->flag == 0)&&($input == $value)){
               
$this->results = $key;
               
$this->flag = 1;
            }
        }
       
$this->flag = 0;
        return
$this->results;       
    }

    function
getValue($input){
        foreach(
$this->mydata as $key => $value){   
            if((
$this->flag == 0)&&($input == $key)){
               
$this->results = $value;
               
$this->flag = 1;
            }
        }
       
$this->flag = 0;
        return
$this->results;
    }

}

?>
jerk at yoosic dot de
21.12.2006 17:05
if you want to modify every value of an multidimensional array use this function used here:

<?php

$array
= array (1=>1, 2=> 2, 3 => array(1=>11, 2=>12, 3=>13));
$text = "test";

function
modarr(&$array, $text) {
        foreach (
$array as $key => $arr) {
                if(
is_array($arr)) $res[$key] = modarr(&$arr,$text);
               
// modification function here
               
else $res[$key] = $arr.$text;
                }
        return
$res;
}

$erg = modarr($array, $text);

print_r($erg); 

?>

result will be_

<?php
Array ( [1] => 1test [2] => 2test [3] => Array ( [1] => 11test [2] => 12test [3] => 13test ) )
?>
nihaopaul at nihaopaul dot com
6.05.2006 12:59
no sure if this should go under array-walk but it does what i need, it searches a multidimensionial array by using an array to walk it, it either returns a value or an array.

<?php
function walker($walk, $array) {
    if (
count($walk) >0) {
        foreach(
$array as $key => $value) {
            if (
$key == $walk[0]) {
                if (
is_array($value)) {
                    unset(
$walk[0]);
                    return
walker(array_values($walk), $value);
                } else {
                    if (isset(
$value)) {
                        if (
count($walk) == 1) {
                            return
$value;
                        } else {
                            return
0;
                        }
                    } else {
                        return
0;
                    }
                }
            }
        }
        return
0;
    } else {
        return
$array;
    }
}
?>
ludvig dot ericson at gmail dot com
21.11.2005 15:09
In response to 'ibolmo', this is an extended version of string_walk, allowing to pass userdata (like array_walk) and to have the function edit the string in the same manner as array_walk allows, note now though that you have to pass a variable, since PHP cannot pass string literals by reference (logically).

<?php
function string_walk(&$string, $funcname, $userdata = null) {
    for(
$i = 0; $i < strlen($string); $i++) {
       
# NOTE: PHP's dereference sucks, we have to do this.
       
$hack = $string{$i};
       
call_user_func($funcname, &$hack, $i, $userdata);
       
$string{$i} = $hack;
    }
}

function
yourFunc($value, $position) {
    echo
$value . ' ';
}

function
yourOtherFunc(&$value, $position) {
   
$value = str_rot13($value);
}

# NOTE: We now need this ugly $x = hack.
string_walk($x = 'interesting', 'yourFunc');
// Ouput: i n t e r e s t i n g

string_walk($x = 'interesting', 'yourOtherFunc');
echo
$x;
// Output: vagrerfgvat
?>

Also note that calling str_rot13() directly on $x would be much faster ;-) just a sample.
ibolmo
18.11.2005 4:53
If anyone is interested to implement the array_walk functionality to a string. I've made this handy function. Note that this can be easily extended for any type of purpose. I've used this to convert from a string of bytes to a hex string then back from hex to a byte string.
<?php
function string_walk($string,$funcname)
{
    for(
$i=0;$i<strlen($string);$i++) {
       
call_user_func($funcname,$string{$i});
    }
}

function
yourFunc($val)
{
    echo
$val.' ';
}

string_walk('interesting','yourFunc');
//ouput: i n t e r e s t i n g
?>
thomas dot hebinck at digionline dot de
31.10.2005 15:07
This is a short way to concatenate a string to each element of an array:

$arr=array(1,2,3,4,5,6,7,8,9,0);
$str=' test'; // must not include ' or " ...

array_walk($arr,create_function('&$elem','$elem .= "' . $str . '";'));

var_export($arr);

The output is:
array ( 0 => '1 test', 1 => '2 test', 2 => '3 test', 3 => '4 test', 4 => '5 test', 5 => '6 test', 6 => '7 test', 7 => '8 test', 8 => '9 test', 9 => '0 test', )
Andrzej Martynowicz at gmail dot com
19.09.2005 3:03
It can be very useful to pass the third (optional) parameter by reference while modifying it permanently in callback function. This will cause passing modified parameter to next iteration of array_walk(). The exaple below enumerates items in the array:

<?
function enumerate( &$item1, $key, &$startNum ) {
  
$item1 = $startNum++ ." $item1";
}

$num = 1;

$fruits = array( "lemon", "orange", "banana", "apple");
array_walk($fruits, 'enumerate', $num );

print_r( $fruits );

echo
'$num is: '. $num ."\n";
?>

This outputs:

Array
(
    [0] => 1 lemon
    [1] => 2 orange
    [2] => 3 banana
    [3] => 4 apple
)
$num is: 1

Notice at the last line of output that outside of array_walk() the $num parameter has initial value of 1. This is because array_walk() does not take the third parameter by reference.. so what if we pass the reference as the optional parameter..

<?
$num
= 1;

$fruits = array( "lemon", "orange", "banana", "apple");
array_walk($fruits, 'enumerate', &$num ); // reference here

print_r( $fruits );

echo
'$num is: '. $num ."\n";
echo
"we've got ". ($num - 1) ." fruits in the basket!";
?>

This outputs:
Array
(
    [0] => 1 lemon
    [1] => 2 orange
    [2] => 3 banana
    [3] => 4 apple
)
$num is: 5
we've got 4 fruits in the basket!

Now $num has changed so we are able to count the items (without calling count() unnecessarily).

As a conclusion, using references with array_walk() can be powerful toy but this should be done carefully since modifying third parameter outside the array_walk() is not always what we want.
webmaster at tmproductionz dot com
18.07.2005 21:54
to the note right before this one.  that will only trim leading and trailing white space. if you want to trim white space inside the string (ie 'hello     world' to 'hello world') you should use this:

$val = preg_replace ( "/\s\s+/" , " " , $val ) ;

this will also trim leading and trailing white space.
el_porno at web dot de
27.05.2005 12:03
You want to get rid of the whitespaces users add in your form fields...?
Simply use...:

class SomeVeryImportantClass
{
...
    public function mungeFormData(&$data)
    {
        array_walk($data, array($this, 'munge'));
    }

    private function munge(&$value, &$key)
    {
        if(is_array($value))
        {
            $this->mungeFormData($value);
        }
        else
        {
            $value = trim($value);
        }
    }
...
}

so...
$obj = new SomeVeryImportantClass;
$obj->mungeFormData($_POST);
___
eNc
caliban at darklock dot com
23.05.2005 19:33
> I believe this relies on the deprecated runtime
> pass-by-reference mechanism

The array() keyword is a language construct, not a function, so I don't think this is applicable.
Enlightened One
8.04.2005 8:17
Beware that "array ($this, method)" construct. If you're wanting to alter members of the "$this" object inside "method" you should construct the callback like this:

  $callback[] = &$this;
  $callback[] = method;
  array_walk ($input, $callback);

Creating your callback using the array() method as suggested by "appletalk" results in a copy of $this being passed to method, not the original object, therefor any changes made to the object by method will be lost when array_walk() returns. While you could construct the callback with "array(&$this, method)", I believe this relies on the deprecated runtime pass-by-reference mechanism which may be removed in future releases of PHP. Better to not create a dependence on that feature now than having to track it down and fix it in the future.
Hayley Watson
17.01.2005 3:27
As well as being able to pass the array the callback will be working on by reference, one can pass the optional userdata parameters by reference also:
<?php

function surprise($x,$key,$xs)
{
   
//$key is unused here.
   
$x.='!';
   
array_push($xs,$x);
}

$array1 = array('this','that','the other');
$array2 = array();

array_walk($array1,'surprise',&$array2);

print_r($array1);
print_r($array2);
?>
Of course, that precise example would be better handled by array_map, but the principle is there.
memandeemail at gmail dot com
11.11.2004 14:24
If you are using array_walk on a class, dont will work

so ... try this on your own class:

class your_own_class {
    /**
    * @return void
    * @param array $input
    * @param string $funcname
    * @desc A little workaround, do the same thing.
    */
    function array_walk($input, $funcname) {
        foreach ($input as $key => $value) $this->$funcname($value, $key);
    }
}

5.11.2004 8:22
If array_walk_recursive() is not present and you want to apply htmlentities() on each array element you can use this:

<?php
function array_htmlentities(&$elem)
{
  if (!
is_array($elem))
  {
   
$elem=htmlentities($elem);
  }
  else
  {
    foreach (
$elem as $key=>$value)
     
$elem[$key]=array_htmlentities($value);
  }
  return
$elem;
}
// array_htmlentities()
?>

If you want to output an array with print_r() and you have html in it this function is very helpful.
lgaga dot dont dot spam at muszaki dot info
16.10.2004 16:31
Behaviour like array_walk_recursive() can be achieved in php <=5 by a callback function to array_walk() similar to this:

function walkcallback(&$val,$key) {
    if (is_array($val)) array_walk($val,'walkcallback',$new);
    else {
        // do what you want with $val and $key recursively
    }
}
bisqwit at iki dot fi
4.09.2004 1:54
It's worth nothing that array_walk can not be used to change keys in the array.
The function may be defined as (&$value, $key) but not (&$value, &$key).
Even though PHP does not complain/warn, it does not modify the key.
paul at heliosville dot com
3.09.2004 21:13
one rather important note that was lost in the Great PHP Doc Note Purge of '04 is that you can call methods using array_walk(). Let's assume that we have a class named 'Search', in which there is a method called 'convertKeywords'. Here's how you would call that convertKeywords method from inside the class:

    array_walk($keywords, array($this, 'convertKeywords'));

Notice that, instead of giving a string as the second argument, you give an array with two items: the variable that holds the class (in this case, $this), and the method to call. Here's what it would look like if you were to call convertKeywords from an already-instantiated class:

    $search = new Search;
    array_walk($keywords, array($search, 'convertKeywords'));
Eierkoek
3.09.2004 15:46
normaly the $_GET array will add slashes to the array values. To remove all slashes in this array, i created the folowing code

  set_magic_quotes_runtime (0);
  function StripAllSlashes (&$ArrayGET, $Value)
  {
    if (is_array ($ArrayGET)) array_walk ($ArrayGET, "StripAllSlashes");
    else $ArrayGET = stripslashes ($ArrayGET);
  }
  if (isset ($_GET) && get_magic_quotes_gpc ()) array_walk ($_GET, "StripAllSlashes");

I hope this code was usefull,

Eierkoek



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)