̃Gg[͂ĂȃubN}[Nɒlj

PHP :: イディオム / array_walk_recursive と create_function で配列の再帰処理



array_walk_recursive と create_function を組み合わせて、少ないコード量で配列の再帰処理を実現します。
二次元や三次元の多次元配列のすべての要素に対して、同一の処理を実行したい時にとても便利。

  • 例)5次元配列の各要素から、* (アスタリスク) と - (ハイフン) を取り除く再帰処理
<?php
$arr = array('1*1', '2-2', array(
    '3*3', '4-4', array(
        '5*5', '6-6', array(
            '7*7', '8-8', array(
                '9*9'
            )
        )
    )
));
 
array_walk_recursive($arr, 
    create_function('&$val', '
        $val = str_replace(array("*", "-"), "", $val);
    ')
 );
 
var_dump($arr);
 
/**
 * 配列のキーも取得したい時は以下のように書きます。
 *
 * create_function('&$val', '
 *  ↓
 * create_function('&$val, $key', '
 */
?>

※. PHP5.3 からは create_function を使わなくても 無名関数 が利用できます。


  • 実行結果
array(3) {
  [0]=>
  string(2) "11"
  [1]=>
  string(2) "22"
  [2]=>
  array(3) {
    [0]=>
    string(2) "33"
    [1]=>
    string(2) "44"
    [2]=>
    array(3) {
      [0]=>
      string(2) "55"
      [1]=>
      string(2) "66"
      [2]=>
      array(3) {
        [0]=>
        string(2) "77"
        [1]=>
        string(2) "88"
        [2]=>
        array(1) {
          [0]=>
          string(2) "99"
        }
      }
    }
  }
}









programming/php/idiom/array_walk_recursive_create_function.txt