需要循环遍历动态大小的数组php

时间:2016-04-25 17:58:03

标签: php arrays

我有一个扑克游戏,其中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中的语句也是如此。

当我把它们放在一起时,我将当前用户视为假,我无法看到原因。任何人都有解决方案或更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

您遇到此问题,因为您正在使用的功能会移动内部数组指针。

您将始终在条件的false部分获得else,因为当您在end($thisPokergame->State['Players'])条件中使用if时,您已将内部数组指针移至最后一个元素。然后在else执行next($thisPokergame->State['Players'])时,您获得false,因为没有更多元素。

我不确定CurrentUserPlayers中的内容我不确定如何处理此问题,但我认为这可行:

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

基本上只需将玩家列表中的第一个玩家旋转到列表末尾,然后将当前用户设置为列表中新的第一个玩家。