|
|
 |
array_walk (PHP 3>= 3.0.3, PHP 4 ) array_walk --
Wendet eine Benutzerfunktion an jedem Element eines Arrays an
Beschreibungint array_walk ( array array, string func [, mixed userdata])
Wendet die mittels func angegebene
Benutzerfunktion für jedes Element von arr
an. func wird der Wert als erster, und der
Schlüssel als zweiter Parameter übergeben. Sofern angegeben, wird
userdata, als dritter Parameter an die
Funktion func übergeben.
func muss eine vom Benutzer definierte
Funktion sein, und nicht eine native PHP Funktion. Deshalb können
Sie array_walk() nicht direkt mit
str2lower() benutzen, sondern müssen erst eine
eigene Funktion damit erstellen, und diese Funktion als Argument
übergeben.
Anmerkung: Anstelle eines Funktionsnamens kann auch
ein Array mit einer Objekt-Referenz und dem Namen einer Methode angegeben werden.
Sollte func mehr als zwei oder drei
Argumente verlangen, wird - abhängig von
userdata - bei jedem Aufruf von
func seitens
array_walk() eine Warnmeldung generiert. Diese
Warnmeldungen können unterdrückt werden, indem man dem
Funktionsaufruf von array_walk() ein '@'
Zeichen voranstellt, oder mittels der Verwendung von
error_reporting().
Anmerkung:
Wenn func mit den Werten des Arrays
direkt arbeiten soll, geben Sie an, dass der erste Parameter von
func als Referenz übergeben werden muss.
Dann werden alle Änderungen an diesen Elementen direkt in dem
selbst durchgeführt.
Die Modifizierung des Arrays aus func
heraus könnte ein unvorhersehbares Verhalten hervorrufen.
Anmerkung:
Die Übergabe des Schlüssels und von
userdata an func
wurde mit PHP 4.0 eingeführt.
In PHP 4 muss reset() aufgerufen werden, da
array_walk() den internen Zeiger nicht
selbsttätig wieder auf das erste Element zurücksetzt.
Von der Benutzerfunktion aus darf das Array selbst nicht geändert
werden, wie zum Beispiel durch Hinzufügen oder Löschen eines
Elementes, oder auch Löschen des Arrays, auf das
array_walk() angewendet wird. Ist das Array
geändert, so ist das Verhalten dieser Funktion undefiniert.
Beispiel 1. array_walk() $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');
reset ($fruits);
array_walk ($fruits, 'test_alter', 'Frucht');
echo "... und nachher:\n";
reset ($fruits);
array_walk ($fruits, 'test_print'); |
Das obige Programm wird folgendes ausgeben:
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 each() und
list().
User Contributed Notes array_walk |
 |
tix@ollisnet.de
09-Apr-2002 10:02 |
|
Found out some interesting code to call a callback function which is a
function of an object. Here's an example code:
class mod {
var $thearray;
function mod( $a ) {
$this->thearray = $a;
}
function cb_modify( &$item, $key ) {
$item = "pref_".$item;
}
function modify() {
array_walk( $this->thearray, array( $this, 'cb_modify' ) );
}
}
$m = new mod(array("one","two","three"));
$m->modify();
print_r($m);
which prints out:
mod Object
(
[thearray] => Array
(
[0] => pref_one
[1] => pref_two
[2] => pref_three
)
)
As you see, the function of the object is called which modifies the array.
Greetings
TiX
|
|
wes-at-marriedguys-dot-com
18-Apr-2002 08:55 |
|
This might be overly-obvious, but when using array_walk(), the function
being called should not return anything.
For example, imagine a function that does a basic clean-up of a form
field:
function clean_up ($field) {
$field = trim($field);
$field = strip_tags($field);
return $field;
}
This works just fine when passing it a variable like a single field, but if
passing it an array, then you need to remove the return line.
function clean_up_array (&$fields_array) {
$fields_array = trim($fields_array);
$fields_array = strip_tags($fields_array);
}
|
|
|
01-May-2002 11:54 |
|
EXAMPLE WHICH WORKS:
function Proc_Default($val,$key,&$erg) {
$erg.= "<option value='".($val)."'>".($val);
}
$array_walk_proc="Proc_Default";
array_walk($cmd,$array_walk_proc,&$erg);
EXAMPLE WHICH DOES NOT WORK:
function Proc_Default($val,$key,&$erg,$param) {
$erg.= "<option value='".($val)."'>".($val);
}
$array_walk_proc="Proc_Default";
array_walk($cmd,$array_walk_proc,&$erg,$param);
|
|
tty01_at_rambler_dot_ru
05-Jun-2002 10:10 |
|
latest php version says:
Call-time pass-by-reference has been deprecated - argument passed by value;
If you would like to pass it by reference, modify the declaration of
array_walk(). If you would like to enable call-time pass-by-reference, you
can set allow_call_time_pass_reference to true in your INI file. However,
future versions may not support this any longer.
|
|
 |
 | |