tmegos blog

Web developer

array_walk_recursiveで変更された値を取得する

だいぶ詰まってしまったのでメモ。

PHPでarray_walk_recursiveという関数があります。

これは指定した関数に、配列を再帰的に処理していくというものです。
配列の中身が多次元配列だととても重宝する関数ですが、戻り値はbooleanになっています。
 つまり、


$array = array_walk_recursive($array, 'ユーザ定義関数');

としてあげても、$arrayの中身はarray_walk_recursiveが正常に終了したかどうかのtrueかfalseが入ってしまうということです。

これを解決するためには、ユーザ定義関数の引数にアンパサンド(&)をつけてあげればいいです。
&をつけることによって、ユーザ定義関数で値が変更されると、もともとの値も変更されます。

例)arrayに入っている文字列の文字コードUTF-8に変更する


function changeCharCode(&$value, $key){ //$valueの頭にある&が重要!
$value = mb_convert_encoding($value, 'UTF-8');
}

$array = 文字列の多次元配列;

array_walk_recursive($array, 'changeCharCode'); //メソッド呼び出し