array_walk_recursive
PHP Manual
PHP Manual»配列 関数»array_walk_recursive

array_walk_recursive

(PHP 5, PHP 7, PHP 8)

array_walk_recursive — 配列の全ての要素に、ユーザー関数を再帰的に適用する

説明

function array_walk_recursive(array|object &$array, callable $callback, mixed $arg = null): true

array 配列の各要素にユーザー定義関数 callbackを適用します。 この関数は配列の要素内を再帰的にたどっていきます。

array にはオブジェクトを渡すこともできます。 その場合、まず配列に変換されたものとして扱われます。 配列とオブジェクトのどちらを渡した場合でも、内部のオブジェクトは再帰的にたどりません。

パラメータ

array

入力の配列。

callback

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

注意:

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

arg

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

戻り値

常に true を返します。

変更履歴

バージョン 説明
8.2.0 戻り値の型が、true になりました。これより前のバージョンでは、bool でした。

例

例1 array_walk_recursive() の例

<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function test_print($item, $key)
{
    echo "$key holds $item\n";
}

array_walk_recursive($fruits, 'test_print');
?>

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

a holds apple
b holds banana
sour holds lemon

キー 'sweet' が表示されないことにお気づきでしょう。array を要素として持つキーは関数に渡されません。

コールバックのパラメータをリファレンスとして渡せば、 array_walk_recursive() で値をその場で更新することもできます。

例2 値をその場で更新する

<?php
$sweet = ['a' => 'apple', 'b' => 'banana'];
$fruits = ['sweet' => $sweet, 'sour' => 'lemon'];

function test_update(&$item)
{
    $item = strtoupper($item);
}

function test_print($item, $key)
{
    echo "$key holds $item\n";
}

array_walk_recursive($fruits, 'test_update');
array_walk_recursive($fruits, 'test_print');
?>

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

a holds APPLE
b holds BANANA
sour holds LEMON

参考

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

To Top