- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Если мне не изменяет память в PHP7 так уже нельзя делать.
Долго это сколько миллисекунд?
Один проход примерно 0.0005-0.001с на реальных данных. То есть 500-1000 миллисекунд.
Не совсем понятно какие ключи выкидывать нужно. Почему имменно unset($arr['b'])? Т.к. b следующий элемент за текущим или какое-то другое условие?
Но если конкретно по этой задаче. То быстро пришли вот такие решения на ум:
Вариант 1:
В этом варианте неплохо бы в конец дописать unset($vl);
Иначе если потом кто-то напишет $vl='bug'; то в arr окажется a='a', c='bug'
Не то что бы это большая проблема (если пишешь код сам и следишь за повторным использованием переменных), но труднонаходимый баг если вдруг появится (особенно в большом коде - ищи потом почему вдруг массив изменился там где его вроде и не трогали).
Вообще при работе с указателями надо быть аккуратнее, в сях этому учат с рождения, а вот для пхп это почти "рокет саенс".
Не совсем понятно какие ключи выкидывать нужно
ага 😕
Тады и изначальный вариант работает, если массив нужен потом. ;)
или
Да и в 5+немного DEPRECATED
Если мне не изменяет память в PHP7 так уже нельзя делать.
Спасибо, почитал об изменениях в PHP7.
foreach действительно переделали, но конкретно в этом случае если не ошибаюсь, изменений не произошло.
https://wiki.php.net/rfc/php7_foreach
Deletion of the next element referred by foreach pointer leads to skipping it (in the same way as as in PHP5).
---------- Добавлено 25.02.2016 в 12:32 ----------
Да и в 5+немного DEPRECATED
С передачей значений в функцию по ссылке не путаете?
Deprecated подобные конструкции:
Тады и изначальный вариант работает, если массив нужен потом.
Нужно с помощью unset сократить перебор
---------- Добавлено 26.02.2016 в 09:54 ----------
А еще такой вопрос. Если массив с числовыми ключами:
То в данном случае, вариант doctorpc тоже работает точно как надо. Результат:
0-a
2-c
Можно ли ожидать что так и будет работать при изменениях версий PHP? Я именно имею ввиду момент, связанный с отличием в массивах php для числовых и для символьных ключей.
Можно ли ожидать что так и будет работать при изменениях версий PHP? Я именно имею ввиду момент, связанный с отличием в массивах php для числовых и для символьных ключей.
Так в тут
я как раз такой пример и привел из документации PHP7.
Ничего в 7 версии касательно этого вопроса не меняется. Все должно работать независимо от того, ключ числовой или нет.
Solmyr, вариант для любой версии php
Нужно итеративно проходя по массиву, выкидывать из него некоторые элементы, что должно сокращать итерацию
А почему вы считаете, что удаление элементов из массива ускорит итерацию? У вас внутри foreach долго выполняющийся код? Или вы пытаетесь сэкономить время на саму операцию foreach?
А почему вы считаете, что удаление элементов из массива ускорит итерацию? У вас внутри foreach долго выполняющийся код? Или вы пытаетесь сэкономить время на саму операцию foreach?
Дык у него же "стоит некая потребляющая много ресурса функция, которую нужно выполнять пореже."© которая выполняется на каждом элементе массива. Можно конечно не ансетить, а просто пропускать (вместо ансета создавая массив с элементами которые надо пропускать), но если весь массив дальше не нужен, то проще ансетить.