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


How to check if numbers are in correct sequence?

我有一个二维数组,其中包含必须使用以下规则验证的数字范围,范围应从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中,最有效的方法是什么?

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

将其与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
array_map(function($inner){
    foreach(array_values($inner) as $key => $value){
        if($key != $value)return "WRONG";
    }
    return "VALID";
},$array)

尝试:

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

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

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