2012-06-01 4 views
3

이의 내가 객체가 있다고 가정 해 봅시다 : 위의 예 James에서중량을 기준으로 번호를 선택하는 방법을

$person->name = array('James', 
         'Sam', 
         'Kevin', 
         'Mike'); 
$person->weight = array(1, 
         3, 
         1, 
         7); 

하는 Sam3의 무게가, 1의 무게가 (인덱스 위치를 기반으로)

나는 한 사람의 이름 만 울릴 수 있기를 원합니다. 체중이 높을수록 이름 선택의 기회가 커집니다. 체중이 낮을수록 이름 선택의 기회가 줄어 듭니다. 일종의 추첨이지만 무게는 있습니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

감사합니다.

+2

배열을 만들고 이름에 * weigth를 넣습니다. 예를 들어 제임스 1 번, 샘 3 번. 그런 다음 임의의 요소를 선택할 수 있습니다. – clentfort

답변

3

이 작동합니다 :

$weighted = array(); 
foreach($person->weight as $key => $value) { 
    $weighted = array_merge($weighted, array_fill(0, $value, $key)); 
} 
$index = array_rand($weighted); 
echo $person->name[$index]; 

기반 this answer에.

1

새 배열을 만들고, 배열에 Sam이라는 이름을 3 번 추가하고, mike를 7 번 추가하고, 다른 하나는 무작위로 선택합니다.

+0

아마도 공간을 절약하기 위해 이름의 인덱스를 배열 – Galen

+0

에 추가하면 간단한 해결책이 될 것입니다. 팁 @ 감사합니다. – user962449

1

또한 모든 가중치를 합하여 하나와 그 합계 사이의 임의의 숫자를 생성 할 수 있습니다. 그런 다음 결과가> = 난수가 될 때까지 가중치 배열을 반복하여 그 사람을 취할 수 있습니다. 약간 빨라질 수도 있습니다.