- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Нужно итеративно проходя по массиву, выкидывать из него некоторые элементы, что должно сокращать итерацию. Как сделать.
Чтобы объяснить что я хочу
Хотелось бы чтобы такой код выдавал:
a-a
c-c
Но он естественно выдает
a-a
b-b
c-c
Как можно решить задачу? Смысл состоит в том, что какие элементы можно (и нужно) выкинуть и итерации выясняется в ходе итерации. На самом деле на месте оператора $vl=='a' как здесь в коде, стоит некая потребляющая много ресурса функция, которую нужно выполнять пореже.
непонятно зачем?
можно использовать
Или еще вариант - прогнать цикл и сформировать необходимый массив
Чуть не забыл - ну и естественно надо сначала проверить, потом выводить)))
непонятно зачем?
можно использовать
Нельзя. Обратите внимание, при анализе элемента 'a' выясняется что можно выкинуть элемент 'b'.
Или еще вариант - прогнать цикл и сформировать необходимый массив
Если прогнать полный цикл - это нерациональное использование вычислительного ресурса, т.к. анализируя элемент 'a' мы понимаем, что элемент 'b' можно не анализировать. А если прогонять полный цикл - его придется анализировать.
Solmyr, а если создать еще один пустой массив и в него записывать фильтруемые элементы и и перед анализом проверять a!=b?
Имхо никак. Массив начал разбираться до начала анализа, т.е работа идет с уже разобранным по элементам массивом.
Solmyr, а если создать еще один пустой массив и в него записывать фильтруемые элементы и и перед анализом проверять a!=b?
Да, это первое что приходит в голову. Но это костыль, дублирование данных. Хочется сделать не "абы как шоб работало", а максимально оптимально. Может быть как-то можно решить эту задачу, изменив исходное представление данных?
---------- Добавлено 25.02.2016 в 23:29 ----------
Полностью задача выглядит так. Есть некая дискретная последовательность элементов, пусть числовой ряд. На эту последовательность наложены отрезки разной длины (в основном короткие), отрезки взаимно перекрываются, про отрезки известно начало и их длина (в общем все что характеризует отрезки). Требуется из массива отрезков выкинуть все отрезки которые полностью перекрываются каким либо одним другим отрезком (если отрезки равны - то не выкидывается ни один, выкидываются при условии если длина одного строго больше чем длина другого). Выполнить максимально быстро. В том числе, задача должна выполняться максимально быстро и в случае если всего отрезков мало, экономия времени должна быть не только на оптимизации перебора но и на оптимизации самого процесса "выкидывания". Исходные данные, уже изначально сортированы по точке начала отрезка, можно это использовать, можно не использовать.
Только дублировать массив и точка. Ничего страшного, прогнать массив не долго.
Ничего страшного, прогнать массив не долго.
Один раз не долго, а сделать такую операцию 100000 раз - долго. Требуется реализовать алгоритм, который будет не просто работать, а работать максимально быстро, насколько позволяет математика. Не хочется только из-за того что php это не может переходить на какой-то другой язык...
Не совсем понятно какие ключи выкидывать нужно. Почему имменно unset($arr['b'])? Т.к. b следующий элемент за текущим или какое-то другое условие?
Но если конкретно по этой задаче. То быстро пришли вот такие решения на ум:
Вариант 1:
Вариант 2:
Долго это сколько миллисекунд?
doctorpc, Удивительно, но первый вариант сработал. Спасибо огромное. Я три раза перечитал описание foreach, думал о таком решении, но не попробовал. Почему-то подумал что работать не будет. Сейчас попробовал - работает.