это мой первый php-скрипт и проблема, iv искали часы без вывода, кроме цикла функции «слишком много переходов». но он не решает мою проблему iv, никогда не изучал программирование или что-то в этом роде, я надеюсь, что есть образованный человек, который меня наполнит:
У меня есть массив, содержащий 120 элементов, состоит из дубликатов, например:
myArray = [0]= item_1, [1] = item _1, [2] = item_2, [3] = item_3 ect..
Короче, я пытаюсь сделать flash php pokermachine, но мне нужно, чтобы эти элементы в массиве были перетасованы, НО я не хочу, чтобы дубликаты были рядом друг с другом после тасования, но мне нужно, чтобы дубликаты были все еще в массиве
я не могу выполнить функцию цикла, чтобы проверить это, потому что он слишком часто меняет тасовку, что будет влиять на шансы игры: ниже – то, что у меня есть:
http://www.gamezslave.net/test/DynamicSlots.swf
вы иногда можете заметить, что он удвоится с помощью двух элементов в одном барабане. В принципе, я динамически создавал виртуальную катушку с файлом php.ini, эти значения многократно вставляются в массив ($ virtualreel), поэтому значение может появляться 10 раз в барабане и другое значение будет отображаться в 5 раз, изменяя нечетные. После того, как я возьму случайный срез () из $ virtualreel, чтобы отобразить 3 вара из этой катушки и повторить цикл еще 4 раз для других барабанов, также я могу только один раз перетасовать Я хочу, чтобы slice () был из одного массива массива барабанов
Я просто перетасовываю каждый новый режим, не выполняющий функции цикла, чтобы перетасовать, если я удвою его на срезе (массив, 3 элемента).
Надежда iv объяснила, что им после достаточно хорошо, чтобы дать вам, ребята, идею.
Вы можете использовать эту функцию:
<?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)));
с<?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)));
Почему не просто:
Редактировать :
$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;
Я думаю, что это то, чего вы ожидали, если вы не возражаете, не сохраняя связь между ключами и ценностями.