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

ventilators

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

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

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


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

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

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

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

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

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

Заранее спасибо!
 

zerkms

TDD infected
Команда форума
foreach + примитивные арифметические операции
 

ventilators

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

Я еще не очень хорошо разбираюсь в данном операторе, прочитал манул но не понял как в данной ситуации его использовать.
 

zerkms

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


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

DiMA

php.spb.ru
Команда форума
> Извиняюсь если есть такая тема, но не нашел.

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

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

проблема в том, что ты смотришь на задачу, как баран на новые ворота, не понимая слова "цикл"..
1. Освой циклы для начала.
2. Массивы и циклы
3. Конвератция файла в массив
 

Фанат

oncle terrible
Команда форума
ventilators
я обычно в таких щадачах предлагаю поработать с карандашами.
у тебя есть коробка карандашей разной длины. надо найти самый длинный. Как ты поступишь?
 

SiMM

Новичок
Можно полюбопытствовать, а зачем?
сдаётся мне что ненужный мудёжь с идентификаторами
 

SiMM

Новичок
> 4. как только текущее число больше предыдущего не на 1 - делаем выход по break;
100
102
101
:)
Правда хз, каким тут боком
> 103 нет и оно меньше 105
 

ventilators

Новичок
Спасибо за ответы.


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 пункт из твоего совета.
 

ventilators

Новичок
*****

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

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

Фанат

oncle terrible
Команда форума
как ты ищешь в отсортированном списке?

-~{}~ 01.07.09 19:59:

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

ventilators

Новичок
список отсортирован но нужное число неизвестно...

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

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

ищу так:

for ($i=0; $i<$end_lines; $i++){
if ($otsortirovan[$i]+1<$otsortirovan[$i+1]){
$rezultat=$otsortirovan[$i]+1;
break;
}}
 

Фанат

oncle terrible
Команда форума
послушай.
ты понимаешь, что такое отсортированный массив?

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

ventilators

Новичок
Мне не надо самый большой, и не надо самый меньший результат.

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

и пример

1
3
6
2
9

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

1
2
3
6
итд

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

Она то и нужна мне, цифра 4.
 

dimagolov

Новичок
он хочет заполнять пропуски в нумерации

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}";
 

ventilators

Новичок
dimagolov

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


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