我有一个扑克游戏,其中2到5个玩家在按下开始按钮之前加入游戏。他们被添加到玩家阵列数组作为包含用户ID和用户名的对象。
我需要使用播放器对象填充我的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']);;
}
if if本身就可以工作,例如,如果它是数组中的最后一个玩家,那么它将当前用户设置为第一个,而else中的语句也是如此。
当我把它们放在一起时,我将当前用户视为假,我无法看到原因。任何人都有解决方案或更好的方法来做到这一点?
答案 0 :(得分:1)
您遇到此问题,因为您正在使用的功能会移动内部数组指针。
您将始终在条件的false
部分获得else
,因为当您在end($thisPokergame->State['Players'])
条件中使用if
时,您已将内部数组指针移至最后一个元素。然后在else
执行next($thisPokergame->State['Players'])
时,您获得false
,因为没有更多元素。
我不确定CurrentUser
或Players
中的内容我不确定如何处理此问题,但我认为这可行:
$player = array_shift($thisPokergame->State['Players']);
$thisPokergame->State['Players'][] = $player;
$thisPokergame->State['CurrentUser'] = reset($thisPokergame->State['Players']);
基本上只需将玩家列表中的第一个玩家旋转到列表末尾,然后将当前用户设置为列表中新的第一个玩家。