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;
}
}
?>
=====================

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/05/21 13:32:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:battan No.3

回答回数63ベストアンサー獲得回数1

ポイント40pt

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

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以降の処理が実行されません。

id:rrr3

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

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

2007/05/21 13:32:02

その他の回答2件)

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155

ポイント20pt

>①なぜでしょう?

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

>②ランダムにする数字を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

id:rrr3

ありがとうございます。

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

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

2007/05/21 12:25:55
id:GEN111 No.2

回答回数472ベストアンサー獲得回数58

ポイント20pt

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

id:rrr3

ありがとうございます。

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

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

おねがいします

2007/05/21 12:25:57
id:battan No.3

回答回数63ベストアンサー獲得回数1ここでベストアンサー

ポイント40pt

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

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以降の処理が実行されません。

id:rrr3

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

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

2007/05/21 13:32:02

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません