гораздо важнее, что с двойными кавычками по неосторожности можно накосячить. поэтому пишу двойные только там где они нужны. с замерами скорости PHP часто происходят парадоксальные вещи. видимо из-за природы самого интерпретатора. он чего-то там внутри сам пытается оптимизировать. поэтому случается большой разброс результатов в зависимости от контекста. наверное только разрабы самого PHP могут правильно толковать результаты тестов
Академический. Тренировка для извилин. Функция простым перебором (см.выше) обрабатывает порядка 2 млн. записей в массиве в секунду. На практике вряд ли будет больше 100 записей в массиве, - это выполняется за 1/20000 сек, что вполне достаточно (по крайней мере пока достаточно). Хотя ... если есть более быстрый простой способ, то почему бы и не использовать.
Я как-то в детстве коту к хвосту привязал нить с солдатиком, ради академического интереса. И что же я получил, а то что "производительность" кота выросла почти в двое! По факту я был рад, что смог увеличить скорость и реакцию кота на посторонний предмет, который после 10го круга слетел с хвоста, но с другой стороны модель "Барсик" побил купленную мебель, за которую меня чуть не кастрировали как "Барсика". После этого я для себя сделал вывод: "Лучше меньше да лучше", и второй вывод: "Привязывать нужно леской". Так и вашей ситуации, если массив будет использоваться один раз за всю жизнь, то придумывать для него быстрые алгоритмы не стоит потраченного времени, проще сэкономить свое время и сбегать за леской;-)
Да нет, это боевая функция. Работает в реальном проекте, вызывается пару раз при каждой генерации страницы.
Да можно конечно. Но не нужно. Создаёт список в нужном порядке, который где-то потом обрабатывается в этом созданном порядке. Создаёт, естественно, вставляя данные поштучно. п.с. По поводу "пару раз" я приуменьшил малость - где-то раз 5-6 вызывается (на сегодня).
на ум пришла идея делать стуктуру из данны и указателя на следующего члена. тогда при втыкании нового нужно просто добавить в конец, заменив указатель на n-1 месте так чтобы он указывал на только что добавленый, а у добавленного установить указатель на n позицию.
Можно и так (Fell-x27 о подобном варианте говорил). Но это уже будут навороты для PHP. Стандартный обход линейных списков в PHP это foreach(), вот для него и делается. Например, так... Код (Text): // Где-то в начале: ->array = array('yandex','bing') ... // Где-то потом ->array = ArrayInsert($array, 'google', 0) // будет 'yandex','google','bing' ... // Совсем потом foreach(->array as...) { }
Это будет рекурсивный пхп. Механизм работы массива пхп, воссозданный на языке пхп и на его массивах. Жесть, да? Добавлено спустя 29 секунд: Это как смарти - шаблонизатор на пхп. простите, я всё о своем. Добавлено спустя 46 секунд: а может кешить в мемкеше в сериализованном виде? может оно быстро будет?
Господа, зачем вы изобретаете двусвязные списки, если я привел ссылку на готовый встроенный пхпшный класс, реализующий все эти радости? О_о
Можно конечно. Когда-нибудь. Когда будет задача, решение которой потребует такого. А к тому времени может разрабы ПХП доведут до ума уже сделанное, глядишь и велосипед изобретать не придётся.
Замечен. Но проигнорирован. Во-первых, у Вас используется глобальная переменная (массив), что очень плохо. Во-вторых, там два цикла перебора, причём во втором вызов процедуры на каждой итерации. Вызов процедуры в ПХП довольно медленная операция (на моём Core i7 где-то 1 млн/сек).
Не плохо и не хорошо. Смотря что делать в этой функции. На моём Core 2 Duo E7400 (слабей i3) Код (Text): array_walk_recursive($a, function($item, $key){global $c;$c[]=$item;}); миллион записей массива $a перебирается за 0.7 сек. Не знаю, куда уж быстрей.
Нет (выше я писал). Просто я придерживаюсь правила "Делай хорошо, а плохо само получится". Опять же, выше я писал, что простой перебор массива (см. ArrayInsert) обрабатывает миллионный массив (вставляет значение) за ~0.5 сек. У Вас же вдвое дольше будет (два цикла, как минимум), т.е. явно хуже - поэтому и "проигнорирован". Вот если бы поиметь алгоритм, который обрабатывает не за 0.5, а за 0.2-0.3 это было бы ценно. И не только "академически".