重み付きの抽選ロジック

<?php
$targets  = array(500,300,100,99,1);  // 抽選対象
$sum      = array_sum($targets);      // レート合計
$total    = 0;                        // レート累計
$rand     = rand(1, $sum);            // 乱数

foreach($targets as $key => $value) {
  $total += $value;
  if ($rand <= $total) {
    $result = $key;
    break;
  }
}
echo $result;  // 抽選結果($targetsの添字)

補足:
・$sumが100になるように調整すれば1%きざみ、1000であれば0.1%きざみのレートになる
・rand(1, $sum)の開始位置をスライドする事により、抽選補正などができる。例)rand($sum,$sum)で100%