- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Нужно итеративно проходя по массиву, выкидывать из него некоторые элементы, что должно сокращать итерацию. Как сделать.
Чтобы объяснить что я хочу
Хотелось бы чтобы такой код выдавал:
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, думал о таком решении, но не попробовал. Почему-то подумал что работать не будет. Сейчас попробовал - работает.