可変引数でうまいバリデーション方法あったら教えて下さい
ルールとしては
・引数の数は3か4である
・$args[0]は1か2か3である
・$args[1]は1-100である
・$args[2]は$args[0]が1か3の場合1-100で$args[0]が2の場合1-10である
・$args[3]は$args[0]が3のもので英数字が入る ただし1文字目は数字はいけない

素直にコードにするとこうなります
function foo(...$args)
{
 $len = count($args);
 switch ($len) {
  case 3:
   if ( ($args[0] === 1) && ($args[1] > 0) && ($args[1] <= 100) && ($args[2] > 0) && ($args[1] <= 100) ) {
    // pass
   } elseif ( ($args[0] === 2) && ($args[1] > 0) && ($args[1] <= 100) && ($args[2] > 0) && ($args[1] <= 10) ) {
    // pass
   }
   break;
  case 4:
   if ( ($args[0] === 3) && ($args[1] > 0) && ($args[1] <= 100) && ($args[2] > 0) && ($args[1] <= 100) && (ctype_alnum($args[2])) && (!ctype_digit($args[2][0]) ) {
    // pass
   }
   break;
 }
}

もうちょっときれいにかけたら書きたいです
これでは見直すたびに鬱になりそうです