Возьмите интервал генерации случайных чисел (от 0 до 99) и раскидайте сгенерированные числа по эквивалентным интервалам (0...69, 70...89, 90...99) - если число попало в опред.  интервал, значит ширина интервала будет вероятностью попадания в него этого числа. 
$rnd_number = rand(0, 99);
switch(true)
{
  case $rnd_number < 70: 
   echo "One";
    break;
 case $rnd_number >= 70 && $rnd_number < 90:
    echo "Two";
    break;
 case $rnd_number  >= 90:
    echo "Three";
    break;
}
Чтобы в этом убедиться, повторите эксперимент, например, 1000 раз:
$counter = array('One'=> 0, 'Two' => 0, 'Three' => 0);
for($i = 0; $i < 1000; $i++)
{
  $rnd_number = rand(0, 99);
  switch(true)
  {
    case $rnd_number < 70: 
     $counter["One"]++;
      break;
   case $rnd_number >= 70 && $rnd_number < 90:
      $counter["Two"]++;
      break;
   case $rnd_number  >= 90:
      $counter["Three"]++;
      break;
  }
}
var_dump($counter);
Если хотите эксплуатировать именно функцию array_rand(), то ей нужно предоставить такой массив:
$block_array = array('One','One','One','One','One','One','One','Two','Two','Three');
$counter = array('One'=> 0, 'Two' => 0, 'Three' => 0);
for($i = 0; $i < 1000; $i++)
{
 $gen_value = array_rand($block_array);
 $counter[$gen_value]++;  
}
var_dump($counter);
Вес каждого элемента увеличивается путем его тиражирования пропорционально вероятности его выпадания.
Решение не будет отличаться от классики.