I can find if an array of values are in sequence using:
sort($arr);
if ($arr == range($arr[0], $arr[count($arr)-1])) {
return true;
}
So anything like 1,2,3,4,5, 6,7,8 will result in true but how can I find a number in sequence but with one number missing? So the expected output would be:
2,3,5,6 = true
2,5,6,8 = false
3,6,10,16 = false
5,7,8,9,10,11 = true
I just checked this and it matches the outputs you expect from your original question
function skippedValue($arr) {
sort($arr);
return sizeof(array_diff(range($arr[0], $arr[count($arr)-1]), $arr)) == 1;
}
var_dump(skippedValue([2,3,5,6])); // true
var_dump(skippedValue([2,5,6,8])); // false
var_dump(skippedValue([3,6,10,16])); // false
var_dump(skippedValue([5,7,8,9,10,11])); //true
result: bool(true) bool(false) bool(false) bool(true)
Algorithmically rather verbose, but works:
function checkAlmostSequential(array $seq, $maxSkips = 1) {
$skipped = 0;
for ($i = 0, $num = $seq[0]; $i < count($seq); $num++) {
if ($num == $seq[$i]) {
$i++;
} else {
$skipped++;
}
if ($skipped > $maxSkips) {
return false;
}
}
return true;
}
var_dump(checkAlmostSequential([2,3,5,6])); // true
var_dump(checkAlmostSequential([2,5,6,8])); // false
var_dump(checkAlmostSequential([3,6,10,16])); // false
var_dump(checkAlmostSequential([5,7,8,9,10,11])); // true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With