質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

392閲覧

PHPの配列名での変数について

koma2727

総合スコア9

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/07/27 06:40

PHPの配列を複数作り、さらにそれを配列にしてforeachで取り出したいです。

$alist = array( "1文字目" => "あ", "2文字目" => "い", "3文字目" => "う" ); $klist = array( "1文字目" => "か", "2文字目" => "き", "3文字目" => "く" );

このようなキーが同じになっている配列を複数つくり

$mojilist = array( "01" => "alist", "02" => "klist", ); foreach($mojilist as $key => $value){ echo $value[1文字目]; echo $value[2文字目]; echo $value[3文字目]; }

これの結果が「あいうかきく」と出力されるようにしたいのですがうまくできません。
おそらく「$value[1文字目]」という書き方が問題だと思うのですが調べても解決法がわからなかったのでどなたかご教授いただけないでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ざっくりですが。。

PHP

1foreach($mojilist as $key => $value){ 2 foreach($$value as $k => $v){ 3 echo $v; 4 } 5}

投稿2018/07/27 06:46

mayoi_maimai

総合スコア1583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koma2727

2018/07/27 07:09

回答ありがとうございます。 すっきりとしたループの書き方でとても勉強になりました!
guest

0

ベストアンサー

こうだと思います。

php

1foreach($mojilist as $key => $value){ 2 echo $$value["1文字目"]; 3 echo $$value["2文字目"]; 4 echo $$value["3文字目"]; 5}

投稿2018/07/27 06:42

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/07/27 06:56

こういうことがしたい背景にもよりますが、データ構造があまり良くないと感じます。 mayoi_maimaiさんの回答のように、foreachの二重ループをすると、"01"や"1文字目"に意味がないことが分かります。 $mojilist = [["あ","い","う"],["か","き","く"]]; foreach($mojilist as $gyo) { foreach($gyo as $ji){echo $ji;}}で良かったはず。 仮に連続でなく、2つめ5つめみたいな取り出しかたをすることが必要だとしたら、連想配列が"2文字目"を持っていることは保証されないので(例えばですが、入力を誤って全角の"2"にしただけで取り出せません)、クラス化してあげるのが筋だと思います。
koma2727

2018/07/27 07:08

まさにこの通りでやりたいことができましたのでベストアンサーに選ばせていただきました!ありがとうございます。 今回質問するためわかりやすい内容の配列にしてしまったため「1文字目」などが確かに意味がないように見えてしまい申し訳ありません。 今回自分がやりたかったこととしては回答いただいた内容がとてもあっているのですが、コメントもとても勉強になりました。
guest

0

配列のキーが文字列ならば、取り出す時も文字列で指定して取り出します。

php

1foreach($mojilist as $key => $value){ 2 echo $value["1文字目"]; 3 echo $value["2文字目"]; 4 echo $value["3文字目"]; 5}

キーが、数字だと

php

1$alist = array( 2 "1" => "あ", 3 "2" => "い", 4 "3" => "う" 5); 6 7$klist = array( 8 "1" => "か", 9 "2" => "き", 10 "3" => "く" 11);

phpは「型判定」がゆるーい言語なので、

php

1foreach($mojilist as $key => $value){ 2 echo $value[1]; 3 echo $value[2]; 4 echo $value[3]; 5}

これでもできちゃうんですが、

数字以外を含んだ文字の羅列は、そもそものphpのコードの書き方として、
そのままで書くことは普通にはできません。' か " でくくります。

以下2つは、OKですが、

php

1$str = '1Aあ'; 2$str = "1Aあ"; 3

以下は、syntax error になります。

php

1$str = 1Aあ;

★ちょびっと応用★

取り出したい「キーが固定」であれば、

php

1//取得キーの配列を作る。 2$get_keys = array ("1文字目", "2文字目", "3文字目"); 3 4foreach($mojilist as $key => $value){ 5 //取得キー配列をつかって、取り出す 6 foreach($get_keys as $_get_key){ 7 echo $value[$_get_key]; 8 } 9}

こういう方法もありですね。

投稿2018/07/27 06:58

mix-peach

総合スコア1910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koma2727

2018/07/27 07:11

詳しい回答ありがとうございます! とても勉強になりましたので今後の参考によく読ませていただきました。 キーが固定の場合など考えつきもしなかったので非常に助かります。
guest

0

こうじゃない?

PHP

1foreach($mojilist as $value){ 2 echo ${$value}["1文字目"]; 3 echo ${$value}["2文字目"]; 4 echo ${$value}["3文字目"]; 5}

投稿2018/07/27 06:54

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koma2727

2018/07/27 07:10

回答ありがとうございます。 まさにこの通りの内容でした!
guest

0

$mojilist = array( "01" => "alist", "02" => "klist", ); foreach($mojilist as $key => $value){ echo $$value[1文字目]; echo $$value[2文字目]; echo $$value[3文字目]; }

これでどうでしょうか(echoの$valueの$を重ねます)

https://qiita.com/andrew954/items/b7e3b3f6d595cc655923

投稿2018/07/27 06:42

balaenoptera

総合スコア222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koma2727

2018/07/27 07:09

回答ありがとうございました! $$value["1文字目"];と””が必要だったようです。 また参考のURLまでいただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問