2016-04-25 12 views
0

私はスタートボタンが押される前に2〜5人のプレーヤーがゲームに参加するポーカーゲームを持っています。プレーヤー配列配列にuseridとusernameを含むオブジェクトとして追加されます。は、ダイナミックなサイズのPHPの配列をループする必要があります

ボタンのクリックで、私は選手オブジェクトと私のCurrentUserにを移入する必要が

(コール/調達/倍)

ときにスタートを着座させるためのゲーム動く座席の錯覚を与えるために、アレイ内の横の動きボタンがクリックされました。現在のユーザを、動作する配列の最初の要素に設定します。

$thisPokergame->State['CurrentUser'] = RESET($thisPokergame->State['Players']); 

はその後場合は、この

if($thisPokergame->State['CurrentUser'] == end($thisPokergame->State['Players'])) 
    { 
     $thisPokergame->State['CurrentUser'] = reset($thisPokergame->State['Players']); 
    } 
    else{ 
     $thisPokergame->State['CurrentUser'] = next($thisPokergame->State['Players']);; 
    } 

しようとイム自体例えば、配列内の最後のプレイヤーが、それは最初に、現在のユーザーを設定し、そのほかの内側の文を実行した場合の作品。

私はそれらを一緒に置くとき、私はfalseとして私はcurrentuserを取得し、私は理由を見ることができません。誰もがそれを行うためのより良い方法や解決策を持っていますか?

+0

なぜ現在のプレーヤーの位置を追跡するために変数を使用しないでください。 player1に対して '$ activePosition = 0'で始まり、' $ currentUser = $ thisPokergame-> State ['Players] [$ activePosition];を実行すると、プレーヤーがあなたの値を変更すると '$ counter = ++ $ counter/5;もしあなたが5人のプレイヤーを持っていれば。または、あなたの「州」の地位が重要なのでしょうか? – olibiaz

答えて

1

使用している関数が内部配列ポインタを移動するため、この問題が発生しています。

あなたはif状態でend($thisPokergame->State['Players'])を使用する場合、あなたは最後の要素に内部配列ポインタを移動しているので、あなたは常に、あなたの条件のelse一部でfalseを取得します。次にelseにはnext($thisPokergame->State['Players'])を入力すると、それ以上の要素がないため、falseが返されます。 CurrentUserPlayersである私は、これは代わりに処理することができる方法かどうか分からないが、私はこれが働くかもしれないと思う確かに知らず

$player = array_shift($thisPokergame->State['Players']); 
$thisPokergame->State['Players'][] = $player; 
$thisPokergame->State['CurrentUser'] = reset($thisPokergame->State['Players']); 

は、基本的にはちょうどのリストの最初のプレーヤーを回転させますプレーヤーをリストの最後に置き、現在のユーザーをリストの新しい最初のプレーヤーに設定します。

+0

それは完璧な意味合いをしています。それを行うための代替方法はありますか? –

+0

@stephenreilly私は、おそらく動作すると思われるもので答えを更新しました。しかし、それは私の最後にはテストされていません。ちょうど私の理論。 –

+0

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

関連する問題