• ベストアンサー

PHPで、相対的な変数名の場合のデータの扱い方

とても説明しずらいのですが、 例えば、ある処理によって連想配列データを受け取るという プログラムがあります。 $hoge = Array (     [deta1] => 大阪市     [deta2] => カツ丼     [deta3] => 男 ) このデータを利用して 出身:<?= $hoge[deta1] ?> 好物:<?= $hoge[deta2] ?> 性別:<?= $hoge[deta3] ?> のようなことを施すわけですが、ここで問題なのは[deta1]という連想配列名が 絶対的な名前ではなく、出力結果によって相対的に変わってしまうという点なんです。 つまり、ある日処理項目を足して $hoge = Array (     [deta1] => 大阪市     [deta2] => 釣り     [deta3] => カツ丼     [deta4] => 男 ) のようになった場合 出身:<?= $hoge[deta1] ?> 好物:<?= $hoge[deta2] ?> 性別:<?= $hoge[deta3] ?> では、おかしくなってしまい、 ズレてきてしまうのです。 もちろん本来なかったデータを追加するわけですから 最終的に、表示部分も取得した出力結果に応じて いじらないといけないわけですが、 何十、何百という配列数、しかも多次元配列とかになってきたら ひとつ追加しただけで、表示部分への影響が 大規模になってきますし、管理もしづらくなってきます。 そこで、このような相対的な連想配列名を扱う場合の 表示処理部分が管理しやすく、影響を受けにくい設計があれば、 アドバイスをお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

これはデータベースで例えると、フィールドだけが増えていくという事ですか?それともレコードも増えていくのですか? フィールドだけなら、ANo.1さんのように $hoge["出身"] $hoge["趣味"] $hoge["好物"] $hoge["性別"] が一番管理しやすいのでは。 もし、レコードも増やすなら $hoge[deta1]["出身"] $hoge[deta1]["趣味"] $hoge[deta1]["好物"] $hoge[deta1]["性別"] $hoge[deta2]["出身"] $hoge[deta2]["趣味"] $hoge[deta2]["好物"] $hoge[deta2]["性別"] でしょう。

yuzuru0024
質問者

お礼

回答ありがとうございます。 これなら、レコード、フィールド両方に対応できそうですね。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

追加するなら $hoge = Array (     [deta1] => 大阪市     [deta2] => カツ丼     [deta3] => 男     [deta4] => 釣り ) にします

yuzuru0024
質問者

お礼

回答ありがとうございます。 参考にしてみます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

そもそもdeta1・・・っていうのはどうやって動的に作成してるのでしょう? それが項目にどうやって紐づいているのでしょう? 一番単純なやりかただと 出身:<?= $hoge["出身"] ?> 好物:<?= $hoge["好物"] ?> 性別:<?= $hoge["性別"] ?> のような添字部分に項目名を指定してしまう手も・・・

yuzuru0024
質問者

お礼

回答ありがとうございます。 参考にしてみます。

関連するQ&A