It\'s the second day I try to find a solution for this problem.
I have an array.
$datas;
$datas[0]; // 8000
$datas[1]; // 8001
$datas[2]; // 8003
$datas
With something like this, it's pretty simple to just iterate through the array with a foreach loop.
foreach ($datas as $key=>$val) {
if ( $val +1 != $datas[$key+1] ) {
echo $val+1; // this is the first free value in the sequence
}
}
<?php
function get($data) {
sort($data);
$i = 0;
while($i < count($data) - 2) {
if ($data[$i+1] - $data[$i] != 1) return $data[$i] + 1;
$i++;
}
return $data[count($data)-1] + 1;
}
echo get([ 8000, 8001, 8003, 8004,]);
echo get([ 8000, 8001, 8002, 8003, 8004,]);
You can use array_diff to find the missing value.
I create a new array with values from min of $datas to max of $datas to compare against.
The return is what is missing.
$arr = range(min($datas),max($datas));
Var_dump(min(array_diff($arr,$datas)));
https://3v4l.org/ZmLAU
Can be a one liner too:
Var_dump(min(array_diff(range(min($datas),max($datas)), $datas)));
something like this should work
for($i=0;$i<count($datas);$i++){
if($datas[$i] + 1 != $datas[$i+1]){
echo($datas[$i] + 1 .' IS the missing number');
}
}
Sort from lowest to highest (if not already sorted) and then increment from the lowest and check if it is in the array:
sort($datas);
for($i=reset($datas); in_array($i, $datas); $i++);
echo $i;
reset
gets the first number, in this case 8000 to start and the in_array
condition terminates the loop when $i
is not in the array.