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(10) "配列テスト"
  [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(10) "配列テスト"
  }
  [5]=>
  string(1) "3"
  [6]=>
  string(4) "four"
}

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

PHP 配列の再帰処理タグ:

トラックバック
  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/206
コメントを投稿

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





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

このサイトは次のライセンスで保護されています。

Creative Commons License

IT業界、エンジニア関連の求人
Web業界に精通したエージェントなので、希望に合った仕事、プロジェクト、雇用形態を紹介してくれてしっかりと転職活動をサポートしてくれます。
初心者のみ採用!【スノーグラス】WEB系エンジニア募集
初心者のみのweb系エンジニア求人!なんでだ?そろそろ転職考えてるのでここ行ってみようかな・・・
Twitter Updates