KANTENNA.COM

Solarized

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(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"
}

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

トラックバック(0)

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24
2012
01.23

MinGW+Mintty+Git

MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。

2012
01.21

[PHP]共有サーバーユーザーのためのPEARインストール方法

共有サーバーでは自由にPEARのパッケージがインストールできないので、 プロジェクトローカルに設置することになりますが、以前httpベースのものを使ってみたんですけど、 やたら重くて使い物にならなかったので、僕は普通にFTPでアップするようにしてます。

ってことでプロジェクトローカルへのPEARのインストール方法。