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

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

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

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

Q&A

解決済

2回答

742閲覧

PHPで配列の値の取り出しが上手く出来ません。

jinseinariyuki

総合スコア10

PHP

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

0グッド

0クリップ

投稿2017/07/09 07:07

編集2017/07/09 07:08

###前提・実現したいこと
PHPで配列の値の取り出しが上手く出来ません。

具体的には、下記のような配列を作成し
'group'の値が共通な'message'内のテキストを
表示させたいのですが、上手く出来ません。

<?php $color = array( 'aka' => array( 'group' => '1', 'message' => '赤です。' ) ); $color = array( 'ao' => array( 'group' => '2', 'message' => '青です。' ) ); $color = array( 'ki' => array( 'group' => '3', 'message' => '黄です。' ) ); $color = array( 'shiro' => array( 'group' => '1', 'message' => '白です。' ) ); $color = array( 'kuro' => array( 'group' => '2', 'message' => '黒です。' ) ); //groupが1のメッセージを表示する foreach ($color as $key => $message) { if (!isset($message['group']) || $message['group'] != '1') {//この辺の書き方に問題があるのかなと思いますが・・・ echo $message . PHP_EOL; } } ?>

~出力したいイメージ~

赤です。
白です。


上記のような形でgroupの1を選択時、groupの1が含まれるメッセージの値が全て出力される。
同様にgroupの2を指定すれば、青です。黒です。としたいのですが
($color as $key => $member) や
if (!isset($member['group']) || $member['group'] != '1') を
書き換えて、試していますが、希望通りの出力が得られていません。

根本的に、配列の組み方がダメなのか、
そもそもforeachを使わず他のアプローチをとるべきなのか
迷走し始めてしまったので、質問をさせて頂きました。

良きアドバイスを頂けると大変助かります。

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

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

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

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

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

guest

回答2

0

$color に最後の黒部分しか(最終的には)設定されないからスね。
現状のままなら kei344 さんの回答された通りですが、
group の重複があるかなしかでまた違った方式が
とれるかもしれません。
--- 追記 ---
たとえば、こんなかんじ

PHP

1$color = array( 2 array( 3 'name' => 'aka', 4 'group' => '1', 5 'message' => '赤です。'), 6 array( 7 'name' => 'ao', 8 'group' => '2', 9 'message' => '青です。'), 10 array( 11 'name' => 'ki', 12 'group' => '3', 13 'message' => '黄です。'), 14 array( 15 'name' => 'shiro', 16 'group' => '1', 17 'message' => '白です。'), 18 array( 19 'name' => 'kuro', 20 'group' => '2', 21 'message' => '黒です。')); 22 23//groupが1のメッセージを表示する 24foreach ($color as $ar) { 25 if ($ar['group'] == '1') { 26 echo $ar['message'] . PHP_EOL; 27 } 28}

もしくは、こんなかんじ

PHP

1$color = array( 2 '1' => array( 3 array('name' => 'aka', 'message' => '赤です。'), 4 array('name' => 'shiro', 'message' => '白です。')), 5 '2' => array( 6 array('name' => 'ao', 'message' => '青です。'), 7 array('name' => 'kuro', 'message' => '黒です。')), 8 '3' => array( 9 array('name' => 'ki', 'message' => '黄です。'))); 10 11//groupが1のメッセージを表示する 12$group = '1'; 13if (!empty($color[$group])) { 14 foreach ($color[$group] as $ar) { 15 echo $ar['message'] . PHP_EOL; 16 } 17}

が自分の好みですかねえ。

投稿2017/07/09 08:43

編集2017/07/10 11:07
takasima20

総合スコア7458

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

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

0

ベストアンサー

こんな感じでしょうか。

PHP

1$color = array(); 2$color[ 'aka' ] = array( 3 'group' => '1', 4 'message' => '赤です。' 5); 6$color[ 'ao' ] = array( 7 'group' => '2', 8 'message' => '青です。' 9); 10$color[ 'ki' ] = array( 11 'group' => '3', 12 'message' => '黄です。' 13); 14$color[ 'shiro' ] = array( 15 'group' => '1', 16 'message' => '白です。' 17); 18$color[ 'kuro' ] = array( 19 'group' => '2', 20 'message' => '黒です。' 21); 22//groupが1のメッセージを表示する 23foreach ($color as $key => $message) { 24 if (!isset($message['group']) || $message['group'] != '1') {//この辺の書き方に問題があるのかなと思いますが・・・ 25 echo $message['message'] . PHP_EOL; 26 } 27}

投稿2017/07/09 07:12

kei344

総合スコア69398

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

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

jinseinariyuki

2017/07/09 16:51

ありがとうございました。 kei344さんからのご指摘を頂き無事解決することが出来ました。 私の凡ミスですが↓の!=→==にすることにより、アウトプットも無事希望通り行うことが出来ました。 if (!isset($message['group']) || $message['group'] == '1') { 色々と基本的なことが出来てないことに気がつかされました。 大変勉強になりました。 余談ですがこれで、週明けに豊田議員ほどではないですが怖~い女上司に 色々とお叱りを受けずに済みそうです。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問