人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php4.2 win

下記のコードを試した場合にうまくいきません。
ランダムにする数字が現在は1です。
これを2や3にすると上手くいきます。
?なぜでしょう?
?ランダムにする数字を1でも上手くいく方法をおねがいします

=====================
<?
$ban[1]=1;
$ban[2]=2;
$ban[3]=3;

$rand_key=array_rand($ban,1);
foreach($rand_key as $val){
switch($ban[$val]){
case 1:
print(1);
break;
case 2:
print(2);
break;
case 3:
print(3);
break;
}
}
?>
=====================

●質問者: rrr3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:as CASE print switch WIN
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kurukuru-neko
●20ポイント

>?なぜでしょう?

それは配列が返されていないから

>?ランダムにする数字を1でも上手

>くいく方法をおねがいします

無理に入れるにする。

CASE 1

if( !is_array($rand_key) ) {

$rand_key=array( $rand_key );

};

CASE 2

$rand_key=array( array_rand($ban,1) );

http://jp.php.net/manual/ja/function.array-rand.php

◎質問者からの返答

ありがとうございます。

配列が返されていないというのはどういういみでしょう?おねがいします

(foreach関数は配列が1つの時はエラーっぽくなるのでしょうか?)


2 ● GEN111
●20ポイント

1) 1 にすると返ってくるのが配列ではなくスカラー値だからです。


2) なので、1のときは次のようなコードになります。

$ban[1] = 1 ;
$ban[2] = 2 ;
$ban[3] = 3 ;

$rand_key = array_rand($ban, 1) ;

switch ($ban[$rand_key]) {
 case 1 :
 print(1) ;
 break ;
 case 2 :
 print(2) ;
 break ;
 case 3 :
 print(3) ;
 break ;
}

PHP: array_rand - Manual

◎質問者からの返答

ありがとうございます。

スカラー値が返ってきた場合にどのような不都合があるのでしょうか?

また、どういう条件の場合にスカラー値が返ってくるのでしょうか?

おねがいします


3 ● battan
●40ポイント ベストアンサー

スカラー値は配列ではありません。

http://php.benscom.com/manual/ja/function.array-rand.php

「エントリを一つだけ取得する場合、 array_rand() はランダムなエントリのキーを返します。 」

試しに、

$rand_key = array_rand($ban, 1) ;

の次に

print_r($rand_key);

と追加してみると判り易いかと思います。

「2」以上の場合は、

Array ( [0] => 3 [1] => 1 )

といった形で配列が返ってきますが、「1」の場合だと

3 とか 2 とかになります。

配列ではないのでforeach($rand_key as $val)で展開できず、switch以降の処理が実行されません。

◎質問者からの返答

とっても分かり易いです!!!

本当にありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ