2017-03-20 3 views
2

제목은 거의 자명하지 않으므로 곧바로 문제를 해결할 것입니다.배열을 나누어 배열을 무작위로 나눕니다. Ph

의 내가이 같은 일부 항목의 배열을 가정 해 봅시다 :

쿼리 내가 다음을 시도하지 않는 한 내가

while ($participantAssoc = mysqli_fetch_assoc($participantsQuery)) { 
    $pushArray['room_id'] = $participantAssoc['room_id']; 
    $pushArray['participant_id'] = $participantAssoc['participant_id']; 
    $pushArray['id'] = $participantAssoc['id']; 
    $pushArray['role'] = $participantAssoc['role']; 
    $pushArray['eliminated'] = $participantAssoc['eliminated']; 
    array_push($participantsArray, $pushArray); 
} 

모든 것이 여기 괜찮 다음 배열을 얻을 실행

$classicRoles = [ 
    'mafia', 
    'mafia', 
    'don', 
    'civilian', 
    'civilian', 
    'civilian', 
    'civilian', 
    'civilian', 
    'civilian', 
    'sherif' 
]; 

이제 한 후 목.

저는 각 참가자에게 2 마피아 역할, 1 역할, 6 민간인 및 1 보안관 역할을 부여하려고합니다.

문제는 내가 전혀 작동하지 않는다는 것입니다.

참가자 수는 1 개 항목에 대해서만 달라질 수 있지만 참가자 수와 역할 수는 서로 완전히 동일하다고 가정합시다. 그래서 지금은 누구든지 위에서 말한 논리를 PHP 배열 내에서 어떻게 만들 수 있을지 말해 줄 수 있습니까? (각 참가자에게 2 마피아 역할, 1 역할, 6 민간인 및 1 보안관 역할을 부여하십시오.)

+0

역할보다 참가자 수가 많으면 어떻게됩니까? – AbraCadaver

+0

역할의 배열이 항상 참여자 배열 –

답변

1

이것은 참가자 수가 역할보다 작거나 같은 경우에 적용됩니다. 루프에서 다음

shuffle($classicRoles); 

을 역할 배열에서 하나를 제거하고 새로운 배열에 할당 : 그것을 랜덤 역할의 배열을 섞어

$pushArray['role'] = array_pop($classicRoles); 

당신이 경우 어떻게해야하는지 규정하지 않은 당신은 역할보다 더 많은 참가자를 가지고 있지만, 무엇인가 : 당신의 역할 배열의 각 요소에 대해

if(count($classicRoles) > 0) { 
    $pushArray['role'] = array_pop($classicRoles); 
} else { 
    break; 
} 
+0

보다 큽니다. 분명히 충분히 명확하지만 그 케이스를 지정하지 않았지만 배열에서 볼 수 있듯이 역할은 배열 수의 수로 나뉩니다. 그래서 사용자 배열이 역할 배열보다 많을 것입니다. 20 명의 플레이어가 yakudza를 사용한다고 가정 해 봅시다. 역할 배열에 20 개의 항목이 포함될 것입니다. –

+0

나는이 코드를 지금 사용하고 그것은 array_pop가 내 마음에 들어 가지 않았기 때문에 작동합니다 –

+0

life-saver !!!! 매력처럼 일 했어! 고맙습니다! –

0

, 사용자 배열 (array_rand())에서 임의의 사용자를 선택하고 삭제 사용 가능한 사용자 배열에서 제공된 사용자 키.

그 트릭을해야합니다.

foreach($classicRoles as $role) { 
    $userKey = array_rand($participantAssoc); 
    $currentUser = $participantAssoc[$userKey]; 
    $currentUser['role'] = $role; 
    $participantsArray[] = $currentUser; 
    unset($participantAssoc[$userKey]); 
} 
관련 문제