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

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

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

Пример 4.1. 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; однако свойство транзитивности не действует, поэтому нельзя применить код по умолчанию к одноэлементным массивам.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Добавление одного массива к другому
Изменение длины массива
Инициализация массива диапазоном
Инициализация массива диапазоном целых чисел
Нахождение всех перестановок массива

Вернуться в раздел: PHP / 4. Массивы