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

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

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

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

Q&A

解決済

3回答

2601閲覧

[PHP]配列の複数要素を1つの変数で管理したい場合の処理

junkboy

総合スコア45

PHP

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

0グッド

0クリップ

投稿2015/12/14 03:58

例えば「受付中/あとわずか/締め切り」のようなステータスを配列で取得し、$conditionsという変数にまとめて管理したい場合、if文を使って以下のように処理を行うのがスマートなのでしょうか。

lang

1// 配列 2$entries = []; 3$entries[] = [ 4 [1] => [ 5 'conditions_ok' => '受付中'; 6 'conditions_few' => ''; 7 'conditions_ok' => ''; 8 ] 9 [2] => [ 10 'conditions_ok' => ''; 11 'conditions_few' => 'あとわずか'; 12 'conditions_ok' => ''; 13 ] 14 [3] => [ 15 'conditions_ok' => ''; 16 'conditions_few' => ''; 17 'conditions_ok' => '締め切り'; 18 ] 19] 20 21// 処理 22foreach($entries as $value) { 23 $conditions = $value['conditions_ok']; 24 if ($conditions == ""){ 25 $conditions = $value['conditions_few']; 26 } 27 if ($conditions == ""){ 28 $conditions = $value['conditions_full']; 29 } 30}

ご教授いただけますと幸いです。

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

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

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

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

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

guest

回答3

0

  • エントリー毎にコンディション状態を持たせたい
  • 表示する時にはそれぞれ受付中、あとわずか、締め切りと言った状態毎の日本語表記を表示させたい

という要件だと解釈しました。(違ったら以下回答は的外れなので無視してください)

その場合、例えば以下の様な方法が考えらえるかと思います。
*出来ればエントリー自体をクラス化して、自分のスタータスについては自分のメソッドで表示できる方が管理が楽になりますが、ここでは手続き型で例を作ってみます。

PHP

1#表示用データは定数値として持つ。設定用ファイルとして別の場所においておくと管理がしやすい 2define("MESSAGE_CONDITIONS_OK","受付中"); 3define("MESSAGE_CONDITIONS_FEW","あとわずか"); 4define("MESSAGE_CONDITIONS_FULL","締め切り"); 5 6define("ID_CONDITIONS_OK",0); 7define("ID_CONDITIONS_FEW",1); 8define("ID_CONDITIONS_FULL",2); 9//表示用のデータ配列定義。出来ればstati 10$conditions_message_list = array( 11 ID_CONDITIONS_OK => MESSAGE_CONDITIONS_OK. 12 ID_CONDITIONS_FEW => MESSAGE_CONDITIONS_FEW, 13 ID_CONDITIONS_FULL => MESSAGE_CONDITIONS_FULL, 14); 15 16 17// 配列 18$entries = []; 19//エントリーのデータは定数値で持たせることで、未知の状態が挿入された場合にわかるようにする 20$entries[] = [ 21 [0] => [ 22 'condition_id' => ID_CONDITIONS_OK; 23 ] 24 [1] => [ 25 'condition_id' => ID_CONDITIONS_FEW; 26 ] 27 [2] => [ 28 'condition_id' => ID_CONDITIONS_FULL; 29 ] 30 31] 32 33// 処理 コンディションIDから表示用データを取得してentriesに追加 34foreach($entries as $key => $value) { 35 $entries[$key]["condition_message"] = $conditions_message_list[$value["condition_id"]]; 36} 37 38 39

投稿2015/12/14 06:27

tanat

総合スコア18709

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

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

junkboy

2015/12/15 01:13

ご回答ありがとうございます、定数を持って処理にあたるという視点がなかったので、大変勉強になりました。 "取得したステータス(可変)を1つの変数で管理し、DBの1カラムに格納する" という処理を実装する予定でした、説明不足大変失礼いたしました。 今後ご教授いただいた処理に近い処理を実装する場合、いただいたソースを参考にさせていただきます。 ありがとうございます:)
guest

0

ベストアンサー

conditions_ok conditions_few conditions_full のどれかに文字列が入っており、他の2つは空白だというルールでしょうか?スマートかどうかは自信が無いですが、次のようにしても動作しそうです。

php

1$conditions = []; 2foreach($entries as $value) { 3 array_push($conditions, 4 trim($value['conditions_ok']) 5 . trim($value['conditions_few']) 6 . trim($value['conditions_full'])); 7}

※trimしているのは空白があったりしたら嫌なためですが、そういうのが無い前提ならこれも不要です。

投稿2015/12/14 06:04

編集2015/12/14 08:21
hirohiro

総合スコア2068

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

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

junkboy

2015/12/15 01:25

ご回答ありがとうございます。 自分で書いていたコードより、可読性が高くスッキリしています。 頂いたコードを実装させていただければと思います。 ありがとうございます:)
guest

0

優先順位が「締め切り>あとわずか>受付中」であれば

PHP

1$conditions = array(); 2foreach ($entries as $id => $entry) { 3 foreach (array('full', 'few', 'ok') as $type) { 4 $status = $entry['conditions_' . $type]; 5 if ($status != '') { 6 $conditions[$i] = $status; 7 break; 8 } 9 } 10}

こんな感じでいかがでしょうか。
#外していたらすみません。。。

投稿2015/12/14 04:06

hyper-drums-ko

総合スコア736

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

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

junkboy

2015/12/14 05:18

ご回答ありがとうございます。 大変参考になります。 他の方の意見も伺ってみたいと思いますので、ステータスをもう少しこのままにさせて下さい:)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問