✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Написание циклов на PHP: два способа; То же самое

33

Когда вы работаете с коллекцией в PHP, особенно с массивами в PHP, есть два способа, которыми вы в первую очередь видите, как обрабатывается информация:

  1. через for петли,
  2. с помощью множества array функций, которые предоставляет PHP.

Что бы это ни стоило, я думаю, что array функции обеспечивают большую читабельность, но они, как было показано, работают медленнее (особенно с большими данными — с меньшими данными это, естественно, будет незначительным).

Я часто работаю с forциклами и связанными с ними функциями, чтобы добиться того же, но я подумал, что, возможно, стоит взглянуть на пример из предыдущего поста и на то, как я использовал arrayфункции для достижения тех же целей, что и for цикл.

В конечном счете, это сравнительный пост, но я думаю, что хорошо видеть, как один и тот же код может быть написан по-разному.

Написание циклов в PHP

С самого начала я не претендую на то, что лучше. Это просто для того, чтобы показать, как циклы написания в PHP могут быть достигнуты несколькими способами.

Вам решать, как вы хотите это реализовать.

Цель этого примера — показать:

  • как получить теги для данного поста,
  • читать их имена — это массив с разделителями вертикальной черты,
  • вернуть имена тегов, разделенные вертикальной чертой, в строковом формате.

И вот два способа сделать это.

Использование стандартного цикла

Использование стандартного for цикла может выглядеть примерно так:

<?php

// Setup the array to store the tag names.
$tagNames = [];

// Iterate through all of the tags.
$tags = get_the_tags();
for ($i = 0; $i < count($tags); $i++) {
  $currentTag = $tags[$i];

  // Only add names that have not been added.
  if (!in_array($currentTag->name, $tagNames)) {
      $tagNames[] = $currentTag->name;
  }
}

// Break the names of the the tags into a '|' delimited string.
$tagNameString = implode('|', $tagNames);

// Clean up the string so any trailing pipes are removed.
$tagNameString = rtrim($tagNameString, '|');

Обратите внимание, что я:

  1. инициализировать строку,
  2. читать теги
  3. перебирать их и добавлять только в том случае, если они еще не существуют,
  4. разделить массив с помощью канала,
  5. удалить все торчащие трубы

Тогда у меня есть строка, которую я могу вернуть.

Использование функций массива

В этом примере я делаю то же самое, но код немного компактнее:

<?php

// Seperate each indidivudal entry by a '|'
implode(
  '|',
  // Remove any duplicates in the array.
  array_filter(
    /* iterate through the list of tags and add the names to an 
     * array that's returned to filter.
     */
    array_map(function ($tag) {
      return $tag->name;
    }, get_the_tags())) );

Полезно читать код от самой внутренней функции к самой внешней. При этом вот что происходит:

  1. Я беру теги, перебирая каждый из них с помощью анонимной функции, переданной в array_map,
  2. Затем я использую возвращенный массив и передаю его, array_filter чтобы удалить дубликаты,
  3. Затем я конвертирую массив в строку с разделителями.

Как и выше, у меня есть строка, которую я могу вернуть.

Это оно?

Ага – и все. Я не говорю, что читаемость второй функции лучше, но скажу, что она требует меньше шагов.

Помните также, что большие наборы данных могут работать хуже.

Несмотря на это, использование встроенных функций массива действительно удобно, поскольку оно обеспечивает уровень встроенной функциональности, встроенной в PHP (в то время как for циклы более распространены во всех языках), которые могут сэкономить нам время (например, фильтрация повторяющихся данных).

Любые ссылки?

На самом деле да. Помимо руководства по PHP, я думаю, что у Карла Александера есть, возможно, самая полная статья по этой теме.

Написание циклов на PHP: два способа; То же самое

Это стоит вашего времени, чтобы прочитать его полностью, особенно если вы нашли этот конкретный пост интересным.

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее