array_walk

配列の全ての要素にユーザー定義の関数を適用する

説明

true array_walk(arrayobject &$array, callable $callback, mixed $arg = null)

array 配列の各要素にユーザー定義関数 callback を適用します。

array_walkarray の内部配列ポインタに影響されません。array_walk はポインタの位置に関わらず配列の全てに渡って適用されます。

パラメータ

array

入力の配列。

callback

通常、 callback は引数を二つとります。 array パラメータの値が最初の引数、 キー/添字は二番目の引数となります。

注意:

callback により配列の値そのものを変更する必要がある場合、 callback の最初の引数は リファレンス として渡す必要があります。この場合、配列の要素に加えた変更は、 配列自体に対して行われます。

注意:

内部関数の多く (たとえば strtolower) は、 期待しているよりも多い引数を受け取ると警告が発生します。 そのため、callback に直接指定することはできません。

変更される可能性があるのは配列の値だけであり、 その構造を変更することはできません。つまり、 プログラマは要素の追加や削除そして並べ替えなどができないということです。 コールバック関数がこの条件を満たさない場合は、 この関数の動作は未定義で予期せぬ結果を得ることになります。

arg

オプションの arg パラメータが指定された場合、 コールバック関数 callback への三番目の引数として渡されます。

戻り値

常に true を返します。

エラー / 例外

PHP 7.1.0 以降では、callback 関数が 2個より多いパラメータ(配列メンバーの値およびキー)を必要とする場合、 または、(arg も渡されている場合) 3個より多いパラメータを必要とする場合、 ArgumentCountError がスローされます。 7.1.0 より前のバージョンでは、callback 関数が 2 つより多いパラメータを必要とする場合、 array_walkcallback をコールする度にエラーレベル E_WARNING が 発生させていました。

変更履歴

バージョン 説明
8.2.0 戻り値の型が、true になりました。これより前のバージョンでは、bool でした。
8.0.0 callback が、 2番目と3番目の引数にリファレンス渡しされる引数を期待している場合、 この関数は 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\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

例2 無名関数を使った、array_walk の例

<?php
$elements = ['a', 'b', 'c'];

array_walk($elements, function ($value, $key) {
  echo "{$key} => {$value}\n";
});

?>

上の例の出力は以下となります。

0 => a
1 => b
2 => c

参考

  • array_walk_recursive
  • iterator_apply
  • list
  • each
  • call_user_func_array
  • array_map
  • foreach