アプリ版:「スタンプのみでお礼する」機能のリリースについて

phpのセレクトボックスの値を配列で指定したのですが初期値の表示がうまくいきません。

以下は現在のソースです。
$start_time[$j]はDBの取得値で取得配列と表示配列が一致するものを初期表示する
というコードが以下になります

$time_array = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" );

for( $a=0; $a < count( $time_array ); $a++){
$selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":"";

$startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n";
}

疑問点ですが別条件で(たとえば$start_time[$j]にデータが0の時)配列の指定した値を選択したいです。
下記のようにそれぞれのvalue値の時に条件を指定すればできるのですが配列の時には
どのように初期値を設定すればいいかわかりません。

       <option value="0" <?php if($start_time[$j] == "0") { echo "selected"; } ?>> 0
<option value="1" <?php if($start_time[$j] == "1") { echo "selected"; } ?>> 1</option>
<option value="2" <?php if($start_time[$j] == "2") { echo "selected"; } ?>> 2</option>
        ・
        ・
        ・
        ・
条件を指定したときに初期値を設定したいです。どのように実装すればいいでしょうか。
よろしくいお願いします。

A 回答 (4件)

> 初期値が取得できたときはその初期値と一致した配列の値を表示する、、、


> 初期値が取得できなかった場合は配列の決まった値を初期表示する、というようなことがしたいのです

つまり$start_time[$j]の値が取得できない場合ということですよね?
それなら$start_time[$j]が取得できなかった場合のコードを書けば済むだけだと思いますが。
例えばPHPは緩いですから、取得できなかったら意図的に$start_time[$j]を作り上げてしまえば、後のコードも変更する必要ありませんよね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

なるほど、そのような方法があったわけですね。
取得比較したときに一致しなければ・・・という使い方ができることで後述も変更なくいけました。

ありがとうございました。。

お礼日時:2014/09/02 17:23

初期値は$start_time[$j]で与えられているんですよね。

それで

<option value="0" <?php if($start_time[$j] == "0") { echo "selected"; } ?>> 0

では問題なくて、

$selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":"";
$startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n";

だとダメということですか?下記のソースで試しましたが、問題なく動作します。原因は別の部分じゃないですかね。少なくとも提示されたソースだけからは再現不可能ですので・・・

(テストスクリプト)
<select>
<?php
$time_array = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" );

$j = 0;
$start_time[$j] = "21"; // selectedにする値
$startTimeSelectBox = '';

for( $a=0; $a < count( $time_array ); $a++){
$selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":"";

$startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n";
}
print $startTimeSelectBox;
?>
</select>

この回答への補足

回答ありがとうございます。
すみません、提示したソースが不足していました。

配列の方も動作するんですけど配列の方は初期値と一致した配列の文字を表示するのみなんですが

       <option value="0" <?php if($start_time[$j] == "0") { echo "selected"; } ?>> 0

<option value="1" <?php if($start_time[$j] == "1") { echo "selected"; } ?>> 1</option>

<option value="2" <?php if($start_time[$j] == "2") { echo "selected"; } ?>> 2</option>

<option value="10" <?php if($start_time[$j] == "10") { echo "selected"; } if($start_time[$j] == "0" ){ echo "selected";} ?>> 10</option>
のように初期値が0の時とかに配列の決まった値を指定したいのです。


for( $a=0; $a < count( $time_array ); $a++){
$selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":"";
if ($start_time[$j] == "0"){$selectedStartTime = ($time_array[0])?" selected":"";
}
$startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n";
}

今こんな風に書いているのですが配列の最後の値がvalue値に代入されてしまいます。

初期値が取れたとき、取れなかった時を実装したいということです。

長々と失礼しました。よろしくお願いします

補足日時:2014/09/02 16:16
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

取れたときと取れなかった時で値を別に指定して処理をすることでうまくいきました。

お礼日時:2014/09/02 17:24

参考にどうぞ


http://www.phppro.jp/qa/4388

この回答への補足

回答ありがとうございます。

参考にさせていただきます。

補足日時:2014/09/02 16:04
    • good
    • 0
この回答へのお礼

参考にさせていただきました。

ありがとうございます。

お礼日時:2014/09/02 17:24

何がしたいのがよくわかりませんが、上のコードで済むのでは。


結局PHP上の添字$jの値が0=HTML上のvalueが0、1は1、2は2なんですよね。

この回答への補足

回答ありがとうございます。

あっています。
言葉だけで説明は難しいのですが、
初期値が取得できたときはその初期値と一致した配列の値を表示する、、、
初期値が取得できなかった場合は配列の決まった値を初期表示する、というようなことがしたいのです

よろしくお願いします。

補足日時:2014/09/02 16:04
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2014/09/02 17:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!