2012-03-04 5 views
0

이것은 내 첫 번째 PHP 스크립트 및 문제입니다, iv는 "너무 많은 laterations"기능을 루핑 이외의 결론없이 시간을 검색했습니다. 중복 구성 예;PHP 배열 셔플, 고유 한 유지

내가 120 요소가 포함 된 배열이 가지고이 :

하지만 내 문제 IV 프로그래밍을 공부하거나 아무리이 날을 기입 할 수있는 교육 사람이 바라고 메신저 것을 결코 해결 나던
myArray = [0]= item_1, [1] = item _1, [2] = item_2, [3] = item_3 ect.. 

간단히 메신저는 플래시 PHP는 pokermachine를 만들려고 노력하지만 난 배열의 모든 사항이 하지만을 단행 할 나는 중복 셔플 후 서로 옆에 싶지 않아하지만 난 중복이 여전히 필요가 필요 배열에

나는 이것을 할 수없는 루프 기능을 수행한다. ause 너무 많은 시간이 게임의 확률에 영향을 못하리 셔플 변경됩니다 것은 아래 내가 현재 가지고있는 것입니다 :

/* 더 이상 사용할 수 여기에 링크를 제거 */

당신이에 알 수 있습니다 두 번 동일한 릴에있는 두 항목으로 두 번됩니다. 기본적으로 php.ini 파일 동적으로 가상 릴을 만들었습니다.이 값은 배열 ($ virtualreel)에 반복적으로 푸시되므로 값이 릴에 10 번 표시 될 수 있습니다 값은 oddsThehon 변이 5 번 나타날 것입니다. $ virtualreel에서 임의의 slice()를 가져 와서이 릴에서 3 개의 변수를 표시하고 다른 릴에 대해 4 번 더 루프를 반복합니다. 또한 원하는대로 한 번만 셔플 할 수 있습니다. 슬라이스()는 같은 릴 배열 순서

나는 슬라이스 (배열, 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

답장을 보내 주셔서 감사합니다. 예를 들어 잘 작동합니다.이 방법을 내 프로젝트에 포함 시키려고합니다.이 문제를 해결해 주셔서 감사합니다. – joshua

+0

오케이 성공을 바탕으로 귀하의 방법을 사용했지만, 스크립트는 조용히 꺼져 버렸고, 정기적으로는 아무것도 보이지 않습니다. 어쩌면이 솔루션을 구현하는 데 더 실용적인 솔루션 일 수 있습니다. – joshua

+0

$ myArray 값의 예를 들여서 확인할 수 있습니까? – botzko

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; 

나는 이것이 당신이하지 괜찮다면 당신이 기대했던 것을 생각 키와 값 사이의 연결을 보존합니다.