2012-03-04 110 views
0

这是我的第一个PHP脚本和问题,IV搜查小时,不超过一个循环功能“太多laterations”等结论。但它不解决我的问题IV没学过编程或什么都使即时通讯希望有一个受过教育的人,以填补我在此:PHP阵列洗牌,保持独特

我有一个包含120个元素的数组;由重复的,例如:

myArray = [0]= item_1, [1] = item _1, [2] = item_2, [3] = item_3 ect.. 

简单地说我尝试做一个闪光的PHP pokermachine但我需要数组中的这些项目要改组的我不想重复成为洗牌后彼此相邻,但我需要重复的是静静的在阵列

我不能做一个循环功能来检查这种情况澳洲英语它将改变洗牌太多次至极会影响比赛的赔率:下面是我目前有:

/*删除这里的链接不再可用*/

你可以注意到时候,它将加倍了2项在同一个卷轴 基本上我与php.ini文件 创建的虚拟卷动态地这些值被重复地推入的阵列($ virtualreel),所以该值可以在所述卷轴和另一出现10次价值将出现5次变异的赔率。不仅如此,我从$ virtualreel随机切片()从该卷轴显示3个变量,并为其他卷轴重复循环4次,我也只能随意洗牌一次slice()是相同的卷轴阵列顺序

我只混洗每一个新的自旋没有运行循环函数洗牌如果我对切片(阵列,3项)加倍。

希望IV说明来意后,即时消息以及足以让你们的想法。

回答

1

您可以使用此功能:

<?php 

function shuffleArray($myArray) { 
    $value_count = array_count_values($myArray); 
    foreach($value_count as $key=>$value) { 
     if ($value > count($myArray)/2) { 
      return false; 
     } 
    } 
    $last_value = $myArray[count($myArray) - 1]; 
    unset($myArray[count($myArray) - 1]); 
    $shuffle = array(); 
    $last = false; 
    while (count($myArray) > 0) { 
    $keys = array_keys($myArray); 
    $i = round(rand(0, count($keys) - 1)); 
    while ($last === $myArray[$keys[$i]]) { 
     $i = round(rand(0, count($keys) - 1)); 
    } 
    $shuffle[] = $myArray[$keys[$i]]; 
    $last = $myArray[$keys[$i]]; 
    unset($myArray[$keys[$i]]); 
    } 

    if ($last_value === $last) { 
    $i = 0; 
    foreach($shuffle as $key=>$value) { 
     if ($value !== $last_value) { 
      $i = $key; 
      break; 
     } 
    } 
    array_splice($shuffle, $i + 1, 0, $last_value); 
    } else { 
    $shuffle[] = $last_value; 
    } 

    return $shuffle; 
} 

print_r(shuffleArray(array(1,5,5,3,7,7))); 
+0

谢谢您的回复,它与你的榜样。我也将尝试incorparate这个方法到我自己的project.thanks解决这个问题。 – joshua 2012-03-05 03:29:05

+0

好吧,我用你的方法成功,但脚本安静的催促超时,并在常规时间不显示任何东西。也许他们可能是更实际的解决方案来实现这个解决方案。 – joshua 2012-03-05 05:46:03

+0

你可以给我$ myArray值的例子来检查它。 – botzko 2012-03-05 09:39:44

1

为什么不干脆:

编辑:

$shuffled = array(); 
while(count($to_shuffle) > 0): 
    $i = rand(0, count($to_shuffle)-1); 
    $shuffled[] = $to_shuffle[$i]; 
    array_splice($to_shuffle, $i, 1,null);     
endwhile; 

我想这是你期待的,如果你不介意不保持键和值之间的关联。