下記のコードを試した場合にうまくいきません。
ランダムにする数字が現在は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;
}
}
?>
=====================
スカラー値は配列ではありません。
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以降の処理が実行されません。
>①なぜでしょう?
それは配列が返されていないから
>②ランダムにする数字を1でも上手
>くいく方法をおねがいします
無理に入れるにする。
CASE 1
if( !is_array($rand_key) ) {
$rand_key=array( $rand_key );
};
CASE 2
$rand_key=array( array_rand($ban,1) );
ありがとうございます。
配列が返されていないというのはどういういみでしょう?おねがいします
(foreach関数は配列が1つの時はエラーっぽくなるのでしょうか?)
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 ; }
ありがとうございます。
スカラー値が返ってきた場合にどのような不都合があるのでしょうか?
また、どういう条件の場合にスカラー値が返ってくるのでしょうか?
おねがいします
スカラー値は配列ではありません。
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以降の処理が実行されません。
とっても分かり易いです!!!
本当にありがとうございます。
とっても分かり易いです!!!
本当にありがとうございます。