PHPの連想配列の要素を添字と同じ名前の変数で取得する
ソウルハッカーズのデータベースをMYSQLで操作してHTMLを生成しているんだが、MYSQLからデータを受け取ると、添字無しの配列、カラム名が添字の連想配列、両方の3種類の方法で取得できるんだが、よっぽどのことが無い限り後者2つのどちらかで取得する。
| NAME | RACE | LV |
|---|---|---|
| モト | 死神 | 72 |
| ミトラス | 魔王 | 80 |
| メタトロン | 大天使 | 80 |
こんな感じにデータベースに登録されているとする。これをPHPからSQLコマンドを入れて取得すると、一体分のデータが
( "NAME" => "モト", "RACE" => "死神", "LV" => 72 )
こんな感じに渡される。これを使う場合には、「$array['NAME']」や「$array['RACE']」などといった方法で呼び出す。
ここまではいいんだが、実際には扱っているカラム数が数十に上る。そして、編集し易さを重視するためにHTMLタグをヒアドキュメントを利用して出力しているのだが、添字付きの変数を2重引用符内やヒアドキュメント中で呼び出す場合は「{」と「}」で囲まなければいけない。ただでさえ添字付きなので非常に冗長になる。
そこでそれを回避するべく
$NAME = $array['NAME'];
$RACE = $array['RACE'];
$LV = $array['LV'];
…
といったように、ずら~~~~~っと変数を作成していたわけだが、WordPressのソースを眺めてたら以外な方法でこれが解決されていた。
$varstoreset = array_keys( $array );
foreach( $varstoreset as $var ) {
$$var = $array[$var];
}
これだけ。このたった3行で上の変数再指定を全てカットできるようになる。
配列の添字を全て取得する。foreachで回して、$添字という変数を作成してデータを挿入。やってることはこれだけなんだが、そもそも「$$varと記述して、$varが文字列なら$文字列という変数を呼び出せる」こと自体全く知らなかったので、目から鱗というか。マニュアルに載ってたか? こんな方法。
Info
2005
0117