0
여기에도 비슷한 질문이 많이 있습니다. 그러나 코드에서 올바르게 구현하는 데 문제가 있습니다.PHP : 배열에서 무작위로 가중치 색인을 선택하십시오.
ID, IP, 포트 및 무게를 데이터베이스에서 가져오고 거기에서 최근에 사용하지 않은 매우 낮은 가중치를 가진 임의의 IP를 선택할 수 있기를 원합니다.
결과 집합의 하위 집합입니다. 전체 목록은 here입니다.
id ip port weight tries
174 127.0.0.1 3128 906 0
101 127.0.0.1 8080 629 2
123 127.0.0.1 3128 433 3
226 127.0.0.1 3128 393 1
82 127.0.0.1 8080 333 2
252 127.0.0.1 8080 276 3
253 127.0.0.1 3128 209 0
240 127.0.0.1 3129 204 1
249 127.0.0.1 3128 190 0
261 127.0.0.1 8888 165 1
120 127.0.0.1 3128 161 3
188 127.0.0.1 8080 149 0
265 127.0.0.1 8080 108 1
275 127.0.0.1 8080 104 0
63 127.0.0.1 8080 95 2
196 127.0.0.1 8080 79 2
248 127.0.0.1 8080 73 1
223 127.0.0.1 8000 72 3
88 127.0.0.1 3128 69 3
422 127.0.0.1 8080 47 0
난 그냥 선택하고 몇 반복해서 사용되는 대다수되지 않는 많은의 IP의이 목록을 아래로 간다.
Yaniro 덕분에 더 나은 솔루션을 찾았습니다.
내 코드 :
private function _weighted_random_simple($proxies)
{
foreach ($proxies as $proxy) {
$weight[] = $proxy['weight'];
}
array_multisort($weight, SORT_ASC, $proxies);
// Define the custom sort function
$proxie = array(
'id' => $proxies[0]['id'],
'ip' => $proxies[0]['ip'],
'port' => $proxies[0]['port'],
'weight' => $proxies[0]['weight'],
'tries' => $proxies[0]['tries']
);
return $proxie;
}
사람은 코드의 더 나은 조각을 제공 할 수
?감사
당신은 오름차순으로 배열을 정렬하고 첫 번째 항목을 선택하는 것이 어떻습니까? 이렇게하면 항상 가장 바쁜 서버를 선택하지 않을 것입니다. – Yaniro
왜 임의의 것을 고르고 싶습니까? 무게가 가장 낮은 것을 사용하면 안 될까요? –
Yaniro와 Emil Vikström, 네, 그렇게 할 수있을 것 같아요. 하지만 500 행에 체중이 1 인 경우 어떻게됩니까? 항상 무작위로 하나를 선택합니까? – PaulM