如何检查数字是否正确顺序?

时间:2012-07-10 21:05:07

标签: php validation numbers

我有一个二维数组,其中包含必须使用以下规则验证的数字范围,范围应从0开始,然后按算术级数进行。

例如:

$array = array();
$array[] = array(0);//VALID
$array[] = array(0,1,2,3,4,5);//VALID
$array[] = array("0","1");//VALID
$array[] = array(0,1,3,4,5,6);//WRONG
$array[] = array(1,2,3,4,5);//WRONG
$array[] = array(0,0,1,2,3,4);//WRONG

在php中最有效的方法是什么?

更新 我忘了添加数字可以表示为字符串

4 个答案:

答案 0 :(得分:9)

将其与range($firstelt, $lastelt)进行比较?

function isProgression($arr){
    return $arr == range(0, $arr[count($arr)-1]);
}

完全随意的基准:

function isProgression($array){
        return ($array == range(0, $array[sizeof($array)-1]));
}

function isProgression2($array){
    $count = count($array);
    for ($i = 0; $i < $count; ++$i) {
        if($array[$i] != $i){
             return true;
        }
    }
    return false;
}

for ($x = 0; $x < 1000000; $x++) {
        // Pick one
        isProgression(array(0,1,2,3,4,5));
        isProgression2(array(0,1,2,3,4,5));
}

结果:

isProgression:   0m2.345s
isProgression2:  0m1.906s

答案 1 :(得分:3)

array_map(function($inner){
    foreach(array_values($inner) as $key => $value){
        if($key != $value)return "WRONG";
    }
    return "VALID";
},$array)

答案 2 :(得分:1)

尝试:

for ($i = 0; $i < count($array); ++$i) {
    if($array[$i] != $i){
        //invalid
    }
}
//valid

答案 3 :(得分:0)

通过引用传递数组对于小数组可能不是最佳的。

 $valid = true;
 foreach ($array as &$inner) {
      $i = -1;
      foreach ($inner as $key => $value) {
           if ((++$i != $key) || ($key != $value)) {
                $valid = false;
                break 2;
           }
      }
 }