I have an array $dice (4,7,3,6,7)
I need a way of checking if each of the values in that array are consecutive numbers.
Is there an easy method of doing this?
function HasConsec($array)
{
$res = false;
$cb = false;
foreach ($array as $im)
{
if ($cb !== false && $cb == $im)
$res = true;
$cb = $im + 1;
}
return $res;
}
if (HasConsec($dice) =='1') ?I think this that this is what you are looking for
for ($c = 0; $c < count($dice); $c++){
$next_arr_pos = $c+1;
if ($c == (count($dice) -1)){
$cons_check = $dice[$c];
}
else
{
$cons_check = $dice[$next_arr_pos];
$gap_calc = $cons_check-$dice[$c];
}
if ($dice[$c] < $cons_check && $gap_calc == 1){
echo 'arr_pos = '.$dice[$c].' Is consecutive with '.$cons_check.' <br />';
}
}
I came up with another approach:
$nums = [-1,0,1];
$nums = array_unique($nums); # optional, comment on the bottom
$range = range(min($nums), max($nums));
$diff = array_diff($range, $nums);
$isConsecutive = empty($diff) && count($nums) === count($range);
$nums = array_unique($nums) - add this if you consider arrays with duplicated numbers valid too e.g. [-1,0,1,1]
However, I'm not a PHP developer and I know that the question looks very old but there is an easy algorithm which I like to share with you that can tell you if your array is consecutive or not.
Here are the steps:
find the maximum number and the minimum number of the input array.
apply the equation: (max - min + 1) == array.length.
if true, then it is consecutive other wise false.
array = [1,2,4,3,5,6]; (6 - 1 + 1 == array.length) == true[1,2,3,4,5,6] is an array of consecutive numbers.1// care your RAM!
2// only valid for increments of one by one (3.02, 3.03, 3.04, ... are consecutives!)
$x = ARRAY(9, 999999999); // be careful!, RAM!
$x = ARRAY(99999997, 99999998, 99999999);
function concq_N($A){
$tmp = $A[0];
for($i = 1; $i < count($A); ++ $i){
++ $tmp;
if($tmp != $A[$i])return false;
}
return true;
}
echo(concq_N($x));
maybe a function including $scale_of_increment and $direction will be intersting:
$x = ARRAY(-99999997, -99999998, -99999999);
is consecutive!, but my function return false xD
==