頭を整理するブログ

頭を整理するために、情報や疑問をブログに書き出していきます。このブログは予約投稿しているのでタイムラグ(今日が今日ではない可能性)があります。

【PHP】変数の形がよくないので $GLOBALS を使って整える

今月仕事をしたお客様のソースコードのデータの取り扱いが、ちょっとうまくなかった。

$a_name = "aaa";
$a_age    = 19;

$b_name = "bbb";
$b_age    = 25;

$c_name = "ccc";
$c_age    = 27;

こういう感じ。

これでもできるんだけど、これだとできないこともある。 例えば、

  • Dさんを追加すると、変数と処理の記述を増やさないといけない。
  • この全員の中から25歳以上の人を探すなどの処理を、簡単に実装できない。

ということがいえます。

なので、

$people = array(
  0 => array(
    "name" => "aaa",
    "age" => 19,
  ),
  1 => array(
    "name" => "bbb",
    "age" => 25,
  ),
  2 => array(
    "name" => "ccc",
    "age" => 27,
  ),
);

こうすると、whileとかforeachとかが使えるようになります。

さて、ここからが本題。 もし、上のような「それぞれのデータで変数がわかれているけど、そのまま使って」と言われたらどうしましょう。

私は、ちょっとテストがしにくいかもしれませんが、 $GLOBALS を使いしました。 $GLOBALS は、変数のデータを連想配列として保持します。

なので、 $GLOBALS["a_name"] という呼び出し方ができます。

$names = array("a", "b", "c");
$columns = array("name", "age");
$people = array();
foeach($names as $key => $name) {
  $people[$key] = array();
  foreach($columns as $column) {
    $people[$key][$column] = $GLOBALS[$name . "_" . $column];
  }
}

これで $people を使えば各変数に格納されているはずのデータにアクセスできますね!