array_walk
(PHP 4, PHP 5, PHP 7)
array_walk — 配列の全ての要素にユーザー定義の関数を適用する
説明
array 配列の各要素にユーザー定義関数
callback を適用します。
array_walk() は array
の内部配列ポインタに影響されません。array_walk()
はポインタの位置に関わらず配列の全てに渡って適用されます。
パラメータ
-
array -
入力の配列。
-
callback -
通常、
callbackは引数を二つとります。arrayパラメータの値が最初の引数、 キー/添字は二番目の引数となります。注意:
callbackにより配列の値そのものを変更する必要がある場合、callbackの最初の引数は 参照 として渡す必要があります。この場合、配列の要素に加えた変更は、 配列自体に対して行われます。注意:
内部関数の多く (たとえば strtolower()) は、 期待しているよりも多い引数を受け取ると警告が発生します。 そのため、
callbackに直接指定することはできません。変更される可能性があるのは配列の値だけであり、 その構造を変更することはできません。つまり、 プログラマは要素の追加や削除そして並べ替えなどができないということです。 コールバック関数がこの条件を満たさない場合は、 この関数の動作は未定義で予期せぬ結果を得ることになります。
-
userdata -
オプションの
userdataパラメータが指定された場合、 コールバック関数callbackへの三番目の引数として渡されます。
返り値
TRUE を返します。
エラー / 例外
PHP 7.1.0 以降では、callback 関数が 2 つより多いパラメータ
(配列メンバーの値およびキー)を必要とする場合、
ArgumentCountError がスローされます。
前は、callback 関数が 2 つより多いパラメータを必要とする場合、
array_walk()がcallback
をコールする度にエラーレベル E_WARNING が
発生していました。
例
例1 array_walk() の例
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}
function test_print($item2, $key)
{
echo "$key. $item2<br />\n";
}
echo "Before ...:\n";
array_walk($fruits, 'test_print');
array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";
array_walk($fruits, 'test_print');
?>
上の例の出力は以下となります。
Before ...: d. lemon a. orange b. banana c. apple ... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple
参考
- array_walk_recursive() - 配列の全ての要素に、ユーザー関数を再帰的に適用する
- iterator_apply() - ユーザー関数をイテレータのすべての要素でコールする
- list() - 配列と同様の形式で、複数の変数への代入を行う
- each() - 配列から現在のキーと値のペアを返して、カーソルを進める
- call_user_func_array() - パラメータの配列を指定してコールバック関数をコールする
- array_map() - 指定した配列の要素にコールバック関数を適用する
- callback 型に関する情報
- foreach