array_walk_recursive

関数の概要

array_walk_recursiveは、PHPの組み込み関数で、多次元配列のすべての要素に対して指定したコールバック関数を再帰的に適用するための関数です。複雑なネスト構造を持つ配列を処理したい場合に便利で、配列内の各値を一括して操作したいときに使われます。

パラメータの説明

  • array &$array:処理対象となる多次元配列への参照。コールバック関数の影響で元の配列の値が変更されることがあります。
  • callable $callback:配列の各要素に適用するコールバック関数。この関数は2つの引数(配列の値、キー)を受け取ります。
  • mixed $userdata(省略可能):コールバック関数に任意の追加データを渡したい場合に利用できます。コールバック関数の第3引数として渡されます。

戻り値

array_walk_recursiveは実行に成功すると true を返し、失敗した場合は false を返します。配列の内容自体は参照渡しで変更されるため、戻り値で配列が返されるわけではありません。

使用例

基本的な使い方

<?php
$arr = [
  "fruits" => ["apple", "banana"],
  "vegetables" => ["carrot", "pea"]
];

function print_value($value, $key) {
    echo "$key: $valuen";
}

array_walk_recursive($arr, "print_value");
?>

この例では、多次元配列のすべての要素のキーと値を出力しています。コールバック関数で値とキーにアクセスできるのがわかります。

配列の値をすべて大文字に変換する

<?php
$data = [
  "name" => "PHP",
  "details" => [
    "type" => "scripting",
    "usage" => "web"
  ]
];

array_walk_recursive($data, function (&$value) {
    $value = strtoupper($value);
});

print_r($data);
?>

こちらの例では、すべての文字列を大文字に変換しています。コールバック関数の引数に値を参照渡ししているため、元の配列が直接書き換えられます。

追加パラメータを使った例

<?php
$nums = [
  "a" => [1, 2],
  "b" => [3, 4]
];

$multiplier = 10;

array_walk_recursive($nums, function (&$value, $key, $factor) {
    $value = $value * $factor;
}, $multiplier);

print_r($nums);
?>

第三引数に乗数を渡して、すべての数値に指定した値を掛け算しています。コールバック関数の第三引数で受け取れる使い方です。

関連する関数

  • array_walk – 一次元配列の各要素にコールバックを適用する
  • array_map – 配列の各要素を変換し新しい配列を返す
  • array_filter – 条件に合う配列要素を抽出する

まとめ

array_walk_recursiveは多次元配列の要素を再帰的に処理できる便利な関数です。配列の内容を変更したり、各要素に対して処理を一括適用したいときに重宝します。コールバック関数に参照渡しを使うことで実務上の処理変更も柔軟に対応でき、第三引数で追加のデータを渡せる点も使いやすいポイントです。ぜひ多次元配列を扱う際に活用してみてください。