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が選択されておらず、過半数が何度も何度も繰り返し使用されています。
ヤニロのおかげで、私はより良い解決策を思いつきました。
マイコード:
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
なぜあなたはランダムなものを選んでいますか?一番小さい体重のものを使うことはできませんでしたか? –
ヤニロとエミール・ヴィクトローム、ええ、私はそれをすることができたと思う。しかし、もし私が体重1の500行を持っていたらどうしますか? – PaulM