Массивы в PHP: начальный индекс, отличный от нуля и хранение нескольких элементов для одного ключа массива
Пусть перед нами стоит достаточно частая задача - присвоить значения для нескольких элементов массива за один раз при том, что начальный индекс не должен быть равен нулю.
Решение очень простое, главное - просто знать о его существовании. Мы говорим фукции array(), что ей нужно использовать другой начальный индекс при помощи синтаксиса "=>":
$days = array(1 => 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница');
Первый индекс со значением "0" далеко не всегда удобен. Скажем, мы хотим, чтобы среди дней недели понедельник имел индекс 1, а не 0.
Теперь для вывода дней недели и их порядковых номеров можно воспользоваться конструкцией:
foreach ($days as $number => $day) { echo "$number: $day<br>"; }
а не так:
foreach ($days as $number => $day) { $number++; echo "$number: $day<br>"; }
Само собой, можно "стартовать" не только с 1, но и с любого другого числа:
$days = array(4 => 'Четверг', 'Пятница', 'Суббота');
Альтернативный вариант:
$days = [4 => 'Четверг', 'Пятница', 'Суббота'];
Более того, можно использовать конструкцию "=>" несколько раз в одном вызове:
$days = array(2 => 'Вторник', 'Среда', 6 => 'Суббота', 'Воскресенье');
Альтернативный вариант:
$days = [2 => 'Вторник', 'Среда', 6 => 'Суббота', 'Воскресенье'];
Как дополнительный "бонус", PHP позволяет использовать отрицательные числа при вызове array() и даже нецелочисленные ключи. Редко, когда это необходимо, однако знать о такой возможности полезно.
Формально при таком подходе мы получаем ассоциативный массив, хотя, как мы уже говорили, граница между числовыми и ассоциативными массивами в PHP часто оказывается размытой. Например:
$tsars = array(-2 => 'Иван Калита', 'Василий 3', 'Иван 4');
Альтернативный вариант:
$tsars = [-2 => 'Иван Калита', 'Василий 3', 'Иван 4'];
Можно также в одном определении array() смешивать числовые и строковые ключи, однако такой подход неудобен для восприятия и редко когда бывает необходим:
$tsars = array(1 => 'Иван 1', 'Иван 2', 'Великий' => 'Иван 3', 'Иван 4')
Альтернативный вариант:
$tsars = [1 => 'Иван 1', 'Иван 2', 'Великий' => 'Иван 3', 'Иван 4']
Если добавлять эти записи в массив поочередно, то получится следующее:
$tsars[1] = 'Иван 1'; // Ключ 1 $tsars[] = 'Иван 2'; // Ключ 1 + 1 => 2 $tsars['Великий'] = 'Иван 3'; // Ключ 'Великий' $tsars[] = 'Иван 4'; // Ключ 2 + 1 => 3
Хранение нескольких элементов для каждого ключа
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Периодически у нас может возникнуть необходимость связать с одним ключом массива несколько элементов. Сделать это можно, задав массив такого вида:
$fruits = array ('красный' => array ('гранат', 'клубника'), 'желтый' => array ('банан'));
Либо можно использовать объект:
while ($obj = mysqli_fetch_assoc($r)) { $fruits[] = $obj; }
При создании массива в PHP ключи должны быть уникальны на уровне массива, поэтому связать несколько элементов с одним ключом не удастстя - произойдет перезапись старого значения.
Для того, чтобы реализовать эту задачу, нужно сохранить необходимые значения в так называемом анонимном массиве:
$fruits = array(); $fruits['красный'][] = 'гранат'; $fruits['красный'][] = 'клубника'; $fruits['желтый'][] = 'банан'; print_r($fruits);
На выходе получим следующую распечатку:
Array ( [красный] => Array ( [0] => гранат [1] => клубника ) [желтый] => Array ( [0] => банан ) )
Либо, если элементы обрабатываются в цикле:
while (list($color,$fruit) = mysqli_fetch_assoc($r)) { $fruits[$color][] = $fruit; }
Чтобы вывести значения элементов нам нужно перебрать в цикле содержимое массива:
foreach ($fruits as $color => $color_fruit) // $color_fruit - массив { foreach ($color_fruit as $fruit) { echo "$fruit имеет $color цвет.<br>"; } }
На этом пока всё, закругляемся.
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также: