2012-03-04 113 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; 

我想這是你期待的,如果你不介意不保持鍵和值之間的關聯。