Поиск следующей цифры

ventilators

Новичок
Поиск следующей цифры

Извиняюсь если есть такая тема, но не нашел. Если кто покажет ссылку на тему буду благодарен.

Собственно вопрос вот в чем.


Есть файл в нем числа с каждой строчки, числа не повторяются и величина их не зависит от очередности.

--------------------
Привожу пример файла:

100
101
105
102
107
--------------------

Задача состоит в том чтобы определить следующее число после меньшего очередного числа.

То есть в данном примере, в файле отсчет начинается от 100. В файле есть 101, есть 102, а вот 103 нет и оно меньше 105. Значит искомый вариант 103.

Как это осуществить с помощью php, поиск такого значение, подскажите пожалуйста!

Заранее спасибо!
 
foreach + примитивные арифметические операции
 
Если все так просто, могли бы написать как именно тут использовать foreach?

Я еще не очень хорошо разбираюсь в данном операторе, прочитал манул но не понял как в данной ситуации его использовать.
 
ventilators
самый простой вариант:
1. читаем в переменную строки из файла с помощью функции file()
2. обходим массив, полученный в п.1 с помощью foreach (тут уж давай учиться, писать готовое не буду)
3. на каждой итерации обхода п.2 проверяем, что текущее число больше предыдущего на 1.
4. как только текущее число больше предыдущего не на 1 - делаем выход по break;


всем остальным: я знаю про fgets, но автору будет проще так, как я написал (имхо)
 
> Извиняюсь если есть такая тема, но не нашел.

что за бредовые предположения? Ты думаешь найти еще такого же чайника со своими школьными домашними заданиями?

> Если все так просто, могли бы написать как именно тут использовать foreach?

проблема в том, что ты смотришь на задачу, как баран на новые ворота, не понимая слова "цикл"..
1. Освой циклы для начала.
2. Массивы и циклы
3. Конвератция файла в массив
 
ventilators
я обычно в таких щадачах предлагаю поработать с карандашами.
у тебя есть коробка карандашей разной длины. надо найти самый длинный. Как ты поступишь?
 
Можно полюбопытствовать, а зачем?
сдаётся мне что ненужный мудёжь с идентификаторами
 
> 4. как только текущее число больше предыдущего не на 1 - делаем выход по break;
100
102
101
:)
Правда хз, каким тут боком
> 103 нет и оно меньше 105
 
Спасибо за ответы.


SiMM
"Правда хз, каким тут боком
> 103 нет и оно меньше 105"

Например формируются данные, которые потом были удалены. Например 103 был удален, раз существует 105, так как список формируется с шагом один.

*****
Достану все карандаши, сравню их между собой по очереди прикладывая друг к другу.
-- Ужос.. чувствую себя маленьким ребенком )

DiMA
"1. Освой циклы для начала.
2. Массивы и циклы
3. Конвератция файла в массив"

На минимальном уровне это знаю, иногда как сейчас возникают вопросы с техническим исполнением.


zerkms
"1. читаем в переменную строки из файла с помощью функции file()
2. обходим массив, полученный в п.1 с помощью foreach (тут уж давай учиться, писать готовое не буду)
3. на каждой итерации обхода п.2 проверяем, что текущее число больше предыдущего на 1.
4. как только текущее число больше предыдущего не на 1 - делаем выход по break;"

Спасибо, вобщем сделал почти так, только без foreach, так-как никак не въеду в него. Использовал просто цикл for, загнал в массив, потом sort() и потом уже 3 и 4 пункт из твоего совета.
 
*****

Сначала for чтобы извлечь из файла присваивая массиву, а потом sort()

потом новый for чтобы уже с отсортированным списком искать.
 
как ты ищешь в отсортированном списке?

-~{}~ 01.07.09 19:59:

а, главное - ЗАЧЕМ? если в нем и так уже все найдено!
 
список отсортирован но нужное число неизвестно...

Задача состоит в том чтобы определить следующее число после меньшего очередного числа.

Тоесть цель не сортировка, а нахождение этого числа. Ну и разумеется потом его по-надобности вставить.

ищу так:

for ($i=0; $i<$end_lines; $i++){
if ($otsortirovan[$i]+1<$otsortirovan[$i+1]){
$rezultat=$otsortirovan[$i]+1;
break;
}}
 
послушай.
ты понимаешь, что такое отсортированный массив?

если у тебя карандаши лежат по росту, их надо перебирать, чтобы найти самый большой?
 
Мне не надо самый большой, и не надо самый меньший результат.

Повторю задачу.
Задача состоит в том чтобы определить следующее число после меньшего очередного числа.

и пример

1
3
6
2
9

Как видешь тут самое маленькое 1 и самое большое 9, они мне вовсе не нужны, а меня интересует цифра 4 так как

1
2
3
6
итд

нет между 3 и 6 значений 4, 5 но следующее после 3 это 4.

Она то и нужна мне, цифра 4.
 
он хочет заполнять пропуски в нумерации

ventilators, не страдай %ерней. тебе это скорее всего не нужно. раз ты спокойно живешь с дырками в нумерации, то и живи с ними. а новый id пусть герерит база сама, как auto_increment-ное поле.

-~{}~ 01.07.09 13:59:

кстати, если все же страдать этой %ерней, то достаточно загонять в массив и делать цикл
PHP:
for ($i= 1; in_array($i, $arr); $i++);
echo "min value missing in array is {$i}";
 
dimagolov

Огромное спасибо за пример, отлично работает и не надо ничего сортировать.


Может и прав что достаточно auto_increment делать, но пока вот решил латать дырки.
 
Сверху