Разработчику. Сборник рецептов PHP
Задавайте вопросы

Печать массивов с запятыми

Вернуться назад

Задача

Необходимо распечатать массив с запятыми, разделяющими элементы, и со строкой «and» перед последним элементом, если в массиве больше двух элементов.

Решение

Используйте функцию pc_array_to_comma_string(), показанную в примере описанном ниже, которая возвращает правильную строку.

function pc_array_to_comma_string($array) {

   switch (count($array)) {
   case 0:
      return ' ';
   case 1:
      return reset($array);
   case 2:
      return join(' and ', $array);
   default:
      $last = array_pop($array);
      return join(', ', $array) . ", and $last";
   }
}

Обсуждение

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

$thundercats = array('Lion-O', 'Panthro', 'Tygra', 'Cheetara', 'Snarf');
print 'ThunderCat good guys include ' . join(', ', $thundercats) . '.';

ThunderCat good guys include Lion-O, Panthro, Tygra, Cheetara, Snarf.

Такая реализация этой функции не совсем то, что нужно, так как мы хотели, чтобы функция pc_array_to_comma_string() работала со всеми массивами, а не только с числовыми, начинающимися с 0. Если она ограничивается только этим подмножеством, то для одноэлементного массива вернет $array[0]. Но если массив начинается не с 0, то элемент $array[0] пустой. Поэтому можно использовать тот факт, что функция reset(), которая сбрасывает внутренний указатель массива, также возвращает значение первого элемента массива.

По сходной причине для извлечения последнего элемента вызывается функция array_pop() вместо представления его в виде $array[count($array)-1]. Это позволяет использовать функцию join() для массива $array.

Также обратите внимание, что код в case 2 приведенного выше оператора switch в действительности также корректно работает и в case 1. А код в default работает (хотя и неэффективно) в case 2; однако свойство транзитивности не действует, поэтому нельзя применить код по умолчанию к одноэлементным массивам.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ