処理分岐フラグ付きの連想配列を用いた任意次元の任意長配列

自分のためのアイディアのメモ。多分、世界でn番目の車輪の再発明

まず1次元

要素データに重複のない配列データを格納するために、連想配列を実装したプログラミング言語で、連想配列の[キーデータ]=>[値データ]に[添字]⇒[要素データ]ではなく、わざと[要素データ]=>[何か(例えば true とか)]と「キー」の部分に要素データを格納する(「添字データ」と「添字という考え方」は捨てる*1)。データへのアクセスは配列長によらない foreach ループを用いる。*2

多次元化

さらにそのプログラミング言語連想配列の「値」の部分に連想配列を代入できる場合に、この構成の連想配列の「値」の部分に、同じように[要素データ]=>[何か]で構成された連想配列を代入する。これで任意次元の任意長の配列のできあがり。(ただのネストしたハッシュ配列に過ぎないけど。)
配列の全要素へのアクセスは foreach ループを関数化して、再起呼出をかける:PHPなら多分、こんな感じ

function readArray ( $array ) {
  foreach ( $array as $key => $value ) {
    if ( is_array($value) ) {
      readArray ( $value );
    } else {
      [something to do using $key and $value]
    }
  } 
}

データ毎の処理の設定

末端の[要素データ]=>[何か]の[何か]の部分に値を設定して、その値によって処理を分岐することができそうである。

*1:[要素データ]=>[何か]の[何か]に連番を代入してインデックスにするという案もある。

*2:foreach ループは、PHPなら foreach ( [array] as [key] => [value] ) を、VBAなら For Each [key] In [some object] を用いる。特にVBAの場合、[key]で直接、要素データが取り出せるので便利。