"PHP" / Говнокод #8659 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
@jfredys 23-Mar-2011 01:07 
 I was looking for trimming all the elements in an array, I found this as the simplest solution: 

<?php 
 array_walk($ids, create_function('&$val', '$val = trim($val);')); 
?>

array_map? не, не слышал.

Запостил: DrFreez DrFreez, (Updated )

Комментарии (50) RSS

  • Ну це проблеми самого языка раз каличесвто функций в нем ни поддается запоминанию
    Ответить
  • Ну вообще array_map создаст новый массив из существующего, а array_walk нет, так что для просто обработки массива, как в данном случае, логичнее использовать array_walk.
    Ответить
  • BRICKING NEWS!
    Хоть мутабильный инплейс с сайдэффектами, но функциональный код на PHP.
    Ответить
      • <?php 
        $ids_trimmed=array_map(trim, $ids); 
        ?>
        Так, конечно, лучше, но я все равно был приятно удивлён, что PHP'шник использует почти higher order functions. Такое далеко не у каждого программера, программирующего на не функциональных языках, встретить можно. Многие мои знакомые даже для for_each использую обычный индексный for и искренне не понимают, зачем весь этот синтаксический сахар нужен. 🙁
        Ответить
        • как бы там ни было, но если с массивом можно нормально работать через for, то лучше так и делать, ибо это быстрее, чем foreach
          Ответить
          • >с массивом можно нормально работать через for, то лучше так и делать, ибо это быстрее, чем foreach

            Кто тебе сказал такую глупость? Все не настолько однозначно, как ты думаешь.
            const int n=100500;
            int a[n];
            for(int i=0;i<n;++i)
              a[i]=100500;
            Такой код с индексным for превращается в следующий псевдокод, если компилятор не тятеля не мятеля:
            int i=0;
            while(i<n)
            {
              *(int*)(((UINTPTR)a)+(sizeof(a[0])*i))=100500;
              i+=1;
            };


            for(int& i : a)
              i=100500;
            А такой проход по массиву в следующий псевдокод:
            int* i=a;
            int* const e=(int*)(UINTPTR)a+n*sizeof(a[0]);
            while(i!=e)
            {
              *i=100500;
              i+=1;//i+=sizeof(a[0]);
            };
            Ну и зачем мне в говнокомпиляторе в цикле лишние умножения (или его более быстрая имитация через сдвиги), из-за индексного for, если можно обойтись без них за счет foreach? Более простые конструкции легче оптимизировать.

            А может вспомнишь, про более простое распараллеливание foreach (автораспараллеливание или засчет алгоритма parallel_for_each) на несколько ядер или на GPU в C++AMP или CUDA или ещё где?

            Хорошо, что хоть пройтись по связанному списку не предложил за индексным for.

            И вспомни, что for each синтаксис безопаснее своего for-собрата.
            Ответить
            • все эти рассуждения абсолютно бесполезны, так они вдребезги разбиваются о суровую реальность...
              Ответить
              • минусующим предлагаю сделать тест с использованием ключей и значений, а затем убиться об стену...
                Ответить
  • Я вот даже про array_walk не слышал, хотя сейчас не нашёл разницы между ним и array_map
    Ответить
    • array_walk просто выполняет функцию для каждого элемента, а array_map создаёт новый массив, элементами которого являются результаты применения функции.
      Первый нужен только ради побочных эффектов.
      array_walk (PHP) = mapc (CL), array_map (PHP) = mapcar (CL)
      Ответить
  • У array_walk первый аргумент - массив, второй - функция.
    У array_map первый аргумент - функция, второй - массив.
    Маразм.
    Ответить
  • Естественно крики "Уууу", "Вау" и "Во даёт" были неизбежны. А у Паши глаза и вовсе на лоб чуть не полезли. Я ещё не видел его таким. Честно признаться, меня даже порадовала такая ревность с его стороны. Видимо, я ему был не безразличен. Может, не зря я всё-таки пять лет психологию зубрил; что-то я в людях смыслю! Ладно, пойдём на ту вечеринку. Думаю, ничего страшного не произойдёт.
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8