HOME>WEBプログラム覚書>PHP 配列の再帰処理

PHP 配列の再帰処理

ディレクトリ内のファイル取得をごにょごにょやってた時に知った再帰って考え方。

配列の処理なんかにも使えたり、色々と役立つ場面は多く感心させられます。

配列を再帰処理で色々と加工するサンプル


class ArrayConvert
{
  var $array_flat = array();
  var $array_replace = array();
  function ArrayConvert($serch, $key, $array)
  {
    $this->array_flat = $this->arrayFlatten($array);
    $this->array_replace = $this->arrayReplace($serch, $key, $array);
  }

  // 多次元配列を一次元配列に
  function arrayFlatten($array)
  {
    foreach ($array as $values) {
      if (is_array($values)) {
        $this->arrayFlatten($values);
      } else {
        $this->a[] = $values;
      }
    }
    return $this->a;
  }

  // 配列の構造を保ったまま値を処理
  function arrayReplace($serch, $key, $array)
  {
    foreach ($array as $values) {
      if (is_array($values)) {
        $a = $this->arrayReplace($serch, $key, $values);
      } else {
        $a = str_replace($serch, $key, $values);
      }
      $b[] = $a;
    }
    return $b;
   }
}

// TEST用配列
$array = array(
  0,
  1,
  2,
  array('zero', 'one', 'two', 'three', array(4, 5, 6)),
  array('array' => '配列テスト'),
  3,
  4
  );

$conv = new ArrayConvert(4, 'four', $array);

echo '<pre>';
var_dump($conv->array_flat);
var_dump($conv->array_replace);
echo '</pre>';

実行結果

array_flat = $this->arrayFlatten($array); $this->array_replace = $this->arrayReplace($serch, $key, $array); } // 多次元配列を一次元配列に function arrayFlatten($array) { foreach ($array as $values) { if (is_array($values)) { $this->arrayFlatten($values); } else { $this->a[] = $values; } } return $this->a; } // 配列の構造を保ったまま値を処理 function arrayReplace($serch, $key, $array) { foreach ($array as $values) { if (is_array($values)) { $a = $this->arrayReplace($serch, $key, $values); } else { $a = str_replace($serch, $key, $values); } $b[] = $a; } return $b; } } $array = array( 0, 1, 2, array('zero', 'one', 'two', 'three', array(4, 5, 6)), array('array' => '配列テスト'), 3, 4 ); $conv = new ArrayConvert(4, 'four', $array); echo '
';
var_dump($conv->array_flat);
var_dump($conv->array_replace);
echo '
'; ?>

サニタイズなんかも再帰でらくらくできちゃいますね。

投稿日 2008年1月29日 03:37
カテゴリ PHP
タグ アルゴリズム | テストコード
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1140

コメント

コメントする
Name
Email Address
URL