PHP 配列の再帰処理

| 2008年01月29日 03:37

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

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

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


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(13) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  string(4) "zero"
  [4]=>
  string(3) "one"
  [5]=>
  string(3) "two"
  [6]=>
  string(5) "three"
  [7]=>
  int(4)
  [8]=>
  int(5)
  [9]=>
  int(6)
  [10]=>
  string(15) "配列テスト"
  [11]=>
  int(3)
  [12]=>
  int(4)
}
array(7) {
  [0]=>
  string(1) "0"
  [1]=>
  string(1) "1"
  [2]=>
  string(1) "2"
  [3]=>
  array(5) {
    [0]=>
    string(4) "zero"
    [1]=>
    string(3) "one"
    [2]=>
    string(3) "two"
    [3]=>
    string(5) "three"
    [4]=>
    array(3) {
      [0]=>
      string(4) "four"
      [1]=>
      string(1) "5"
      [2]=>
      string(1) "6"
    }
  }
  [4]=>
  array(1) {
    [0]=>
    string(15) "配列テスト"
  }
  [5]=>
  string(1) "3"
  [6]=>
  string(4) "four"
}

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

kantenna.com 最新更新ページ

PHP 配列の再帰処理タグ:

トラックバック

  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/405
コメント (0)
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?