Как найти пропущенный ключ в массиве с конца?
Ниже короткий пример массива, в реальности он может достигать милионы значений, желательно находить с максимальной скоростью.
Пропущеных может быть много, нужно только один с конца, из примера ниже пропущеный это 127.
$array = [
121 => 'test',
123 => 'test',
124 => 'test',
125 => 'test',
126 => 'test',
128 => 'test',
129 => 'test',
];
arsort($array);
$result = false;
foreach ($array as $key => $value) {
if (!isset($array[$key--])) {
$result = $key;
}
}
var_dump($result); // выводит false
Ответы (1 шт):
Автор решения: Виктор
→ Ссылка
Первое, что получилось:)
$array = [
121 => 'test',
123 => 'test',
124 => 'test',
125 => 'test',
126 => 'test',
128 => 'test',
129 => 'test',
];
$cur = NULL;
$arr = array_keys($array); // получаем ключи
rsort($arr); // sort по убыванию
foreach( $arr as $val )
{
if( is_null($cur) )
{
$cur = $val;
continue;
}
if( $val == $cur ) { continue; } // одинаковые ключи
if( $val+1 != $cur )
{
$val = $val + 1;
print("Found number: $val\n");
break;
}
$cur = $val;
}