| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > 5,6,7-20,35,100-400,550,549,548 |
| Автор: Wowa 17.4.2005, 10:44 |
| Дана строка: 5,6,7-20,35,100-400,550,549,548 Нужно обработать все элементы с заданными ИД в этом списке и интревалах. По идее, нужно бы это все обработать и закинуть все номера в массив. Но если будет указана строка, типа: 3,4,5,7,100-10000, то получиться, что нужно будет 9004 элемента записывать в массив, что имхо довольно много. А ведь можешь быть еще больше. Как поступить в этом случае, чтобы не заносить все поэлементно в массив, а затем через foreach обрабатывать. Есть какие-нибудь мысли? |
| Автор: Irokez 17.4.2005, 10:50 |
| я бы сделал так: 1) разбить строку по запятым, получил бы массив: (3 4 5 6 100-10000) 2) циклом foreach пройтись по полученному массиву, определяя является ли элемент числом или же интервалом, если числом, то получить элемент с ID равному заданному числу, если интервалом, то определить границы интервала (регекспом или др строковыми ф-циями) и через цикл while или do .. while совершать операции над элементами с ID, находящимися в полученном интервале |
| Автор: IZ@TOP 18.4.2005, 08:01 |
| Wowa, а зачем тебе это нужно? Может быть есть более простое решение? Варианты Ирокеза поддерживаю. Кроме того что цикл foreach нужен |
| Автор: Wowa 18.4.2005, 09:29 | ||
Есть база с записями. У каждой записи есть ИД. Мне нужно удалить в ней определенные записи. |
| Автор: Akina 18.4.2005, 09:50 | ||
| По методу Irokez-а я бы: 1) без изменений 2) Преобразовать массив из полученного вида в массив типа Start-End, т.е. для указанного случая 3 3 4 4 5 5 6 6 100 10000 Дальше уже работать много проще...
|
| Автор: Wowa 24.4.2005, 11:47 | ||||
| А что сделать быстрее выполнить N раз это:
или один раз это:
? |
| Автор: Sardar 24.4.2005, 12:03 | ||
Конечно вторым способом. По вопросу: бьём список на числа и интервалы. Все числа сгруппировать в один IN, а интервалы в несколько OR BETWEEN. |
| Автор: Sardar 24.4.2005, 12:30 | ||
Вот простенький пример за 5 минут, не проверяющий верность интервала(100-5), и не имееющий отрицания(NOT IN, NOT BETWEEN):
|