Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Список чисел по диапазону....
Покинул форум
Сообщений всего: 103
Дата рег-ции: Май 2012 Откуда: г.Мытищи, МО
Помог: 0 раз(а)
Всем привет.
Нужна Ваша помощь, т.е. сам уже не знаю как быть...
Есть строка: "4.17,5.21-5.26,6.0-6.7,6.9-6.19". Задача получить массив чисел: "4.17, 5.21, 5.22, 5.23, 5.24, 5.25, 5.26, 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.9, 6.10, 6.11, 6.12, 6.13, 6.14, 6.15, 6.16, 6.17, 6.18, 6.19" (Строго в таком виде и никак иначе).
При этом, например число "6.5" меньше числа "6.12".
Пробовал через range, но она строит массив совершенно не в том порядке, т.к. считает что число "6.5" больше числа "6.12", а та-же убирает нули на конце, превращая число "6.0" в "6".
Как можно спарсить такую строку, для получения нужного результата, или как эту строку изменить, но что-бы оставить возможность указания как одного числа, так и диапазона чисел.
RickMan
Отправлено: 24 Сентября, 2014 - 18:15:20
Участник
Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012
Вот решение...НО вы не правы по поводу последнего диапазона... Почему вы посчитали что 6,9 = 6,09 )))) Поэтому там диапахон цифр чуть другой)
Ответ в данном случае должен быть:
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Dragon_Knight пишет:
т.к. считает что число "6.5" больше числа "6.12"
А почему Вы считаете, что должно быть наоборот?)
Dragon_Knight пишет:
та-же убирает нули на конце
Приводите сами его в нужный формат.
Sail
Отправлено: 25 Сентября, 2014 - 10:16:03
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
RickMan пишет:
Вот точнее где ваша ошибка:
Цитата:
6.9-6.19
и разбили это как
Цитата:
6.9, 6.10, 6.11, 6.12, 6.13, 6.14, 6.15, 6.16, 6.17, 6.18, 6.19
а надо:
Цитата:
6.90, 6.89, 6.88 ................ 6.20, 6.19
А если надо так, как ТС написал? Например, числа - это составной ключ, где то, что до десятичной точки означает раздельчик, а то, что после - подраздельчик Dragon_Knight, в общем, если при разборе встречается интервал, то посредством функций substr() и strpos(), или explode() из первого числа интервала можно выделить число до точки и число после точки, из второго - число после точки. И уже эти два числа пропустить через range.
Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012
Помог: 30 раз(а)
Может автору надо чуток математику тогда выучить? И не мешало бы и хотябы чуток основы алгоритмики... (Добавление)
Чуть поигравшись довел решение до такого вот варианта:
Покинул форум
Сообщений всего: 103
Дата рег-ции: Май 2012 Откуда: г.Мытищи, МО
Помог: 0 раз(а)
RickMan, а может Вам стоит подучить чтение русского текста? Я вроде понятно написал как мне нужно и я не просил Вашего совета в получении вашего видения этих чисел.
Но если Вы так хотите, эти числа это версии программного обеспечения, которые поддерживает данная архитектура. И версии выходят в порядке 6.0, 6.6, 6.12, 6.19, и это возрастающий порядок чисел. Т.е. версия 6.6 старее и старше чем версия 6.19 и в конкретном случае: (6.6 < 6.19) === TRUE
Полный список версий выглядит так и только так: "4.17, 5.21, 5.22, 5.23, 5.24, 5.25, 5.26, 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.9, 6.10, 6.11, 6.12, 6.13, 6.14, 6.15, 6.16, 6.17, 6.18, 6.19"!
Sail, я тоже думал, что сначала поделить по запятой, потом если есть тире то делить по нему и потом поделить по точке и считать десятичные числа как простые, но тогда получиться уж слишком кривой код, да и циклов будет слишком много...
Мелкий
Отправлено: 25 Сентября, 2014 - 13:03:49
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012
Помог: 30 раз(а)
Научитесь писать нормально ТЗ и быть более благодарным, когда люди тратят свое время и помогают вам. Замечу, что в названии темы и первом вашем сообщении ни слова не сказанно по поводу того, что это диапазон версий. *facepalm*
armancho7777777
Отправлено: 25 Сентября, 2014 - 13:39:42
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Покинул форум
Сообщений всего: 103
Дата рег-ции: Май 2012 Откуда: г.Мытищи, МО
Помог: 0 раз(а)
Мелкий, Очень интересный вариант, но громоздкий. Сам такого писать не хотел, потому что думал можно как-то более интереснее сделать, но всё равно спасибо. Вечером, дома проверю и отпишусь.
PS: Исходный вариант не обязательно такой, просто я не придумал более грамотный способ хранить большое кол-во версий, учитывая что вводить их будут вручную.
RickMan, Я благодарный и всегда вежливый, но когда мне предлагают учить математику, я отправляю пойти и учиться читать...
Я не даром в первом посте указал что "число "6.5" меньше числа "6.12"" и то, что PHP считает числа не так как нужно мне. Могли-бы и догадаться, что это не просто числа...
armancho7777777, -----
Sail, диапазона типа "5.21-7.26" не может быть, потому что обычно переход на новую мажорную версию происходит не доходя до 30 минорной версии, и придётся указывать как-то так: "5.21-5.26,6.0-6.7,6.9-6.19,7.0-7.26".
Ch_chov, Тоже очень интересный вариант. Дома проверю и отпишусь. Спасибо
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Sail пишет:
что насчёт диапазона "5.21-7.26"?
Намеренно проверяю assert'ом.
Такой диапазон невозможно реализовать в общем случае: неизвестно, существовала ли в природе версия 5.22. Да что 5.22, вся ветка 6.* могла быть пропущена, т.к., например, чётные версии в этом проекте могут быть только тестовые.
Ch_chov, хм, блин, а я был уверен, что list выдаст то ли варнинг то ли предупреждение за пропущенные элементы
----- PostgreSQL DBA
Dragon_Knight
Отправлено: 27 Сентября, 2014 - 16:00:30
Гость
Покинул форум
Сообщений всего: 103
Дата рег-ции: Май 2012 Откуда: г.Мытищи, МО
Помог: 0 раз(а)
Мелкий, Ch_chov, Ваши варианты замечательно работают. Спасибо за помощь
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.