配列を変数で指定して値を取得するやり方を教えて下さい。
php
1$array['abc']['def']['ghi']['jkl']='TEST'; 2 3//やり方のイメージ1 4$get_1=['abc','def','ghi','jkl']; 5echo $array[$get_1]; //=> TEST 6 7//やり方のイメージ2 8$get_2=['abc'=>['def'=>['ghi'=>'jkl']]]; 9echo $array[$get_2]; //=> TEST
もしかしたら、凄い基礎的なことかもしれないので恐れ恐れお聞きします(;´Д`)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
使うことは無いと思いますが、こういう方法なら可能です。
PHP
1$array['abc']['def']['ghi']['jkl']='TEST'; 2$get_1="['abc']['def']['ghi']['jkl']"; 3eval("echo \$array".$get_1.";"); 4//TEST 5 6eval("\$val = \$array".$get_1.";"); 7echo $val; 8//TEST
警告
eval() は非常に危険な言語構造です。 というのも、任意の PHP コードを実行できてしまうからです。 これを使うことはおすすめしません。 いろいろ検討した結果どうしても使わざるを得なくなった場合は、細心の注意を払って使いましょう。 ユーザーから受け取ったデータをそのまま渡してはいけません。 渡す前に、適切な検証が必要です。
投稿2016/06/01 14:52
編集2016/06/01 14:59総合スコア2068
0
tanatさんのおっしゃるように、それ用の関数つくるのかなあ。
手抜きするならこんな感じ?
PHP
1$array['abc']['def']['ghi']['jkl']='TEST'; 2$get_1=['abc','def','ghi','jkl']; 3 4echo getArrayValueByArray($array,$get_1); 5 6function getArrayValueByArray($data_array,$key_array){ 7 list($k1,$k2,$k3,$k4) = $key_array; 8 return $data_array[$k1][$k2][$k3][$k4]; 9}
投稿2016/06/01 11:12
総合スコア7458
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
出来れば面白いと思って調べてみましたが、
PHPマニュアル 配列
PHPで配列の添え字に数値と文字列以外が使えるという記述は見当たりませんでした。
なので、やろうと思うなら自分で関数なりメソッドなりを作って実装しないと出来ないと思います(もしかしたらそういう関数があるかも?)
多分こんな感じ(動かしてもいないので雰囲気だけ)
PHP
1$array['abc']['def']['ghi']['jkl']='TEST'; 2$get_1=['abc','def','ghi','jkl']; 3 4echo getArrayValueByArray($array,$get_1); 5 6function getArrayValueByArray($data_array,$key_array){ 7 $current_val = $data_array; 8 foreach($key_array as $key => $val){ 9 if(isset($current_val[$val])){ 10 $current_val = $current_val[$val]; 11 }else{ 12 //unsetとnullは違うので、nullを返すのは厳密には微妙 13 return null; 14 } 15 } 16 17 return $current_val; 18} 19 20
ただ、この実装が必要なケースだと、多次元連想配列で頑張るよりは、添え字そのものを工夫して1次元にするとか、オブジェクトにして内部操作を隠蔽するとかそういった方向で設計した方がいいケースの方が多いんじゃないかなとも思います。
投稿2016/06/01 10:56
総合スコア18709
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/01 11:12
2016/06/01 11:22
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/02 02:20
2016/06/02 03:24 編集
2016/06/02 03:53