В предыдущей статье было рассказано, как создать массив и добавить в него новый элемент. Сейчас мы обсудим некоторые новые функции.
Выделение диапазона значений
range() функция создает массив последовательных целых или символьных значений между двумя значениями. Например:
$numbers = range(2, 5); // $numbers = array(2, 3, 4, 5); $letters = range('a', 'z'); // $numbers содержит алфавит $reversed_numbers = range(5, 2); // $numbers = array(5, 4, 3, 2);
Только первые буквы строк используется для построения диапазона:
range('aaa', 'zzz') /// тоже самое, что и range('a','z')
Получение размера массива
count() и sizeof() идентичны в использовании. Они возвращают количество элементов в массиве. Нет никаких предпочтений в отношении этих функций. Вот пример:
$family = array('Fred', 'Wilma', 'Pebbles'); $size = count($family); // $size = 3 $confusion = array( 10 => 'ten', 11 => 'eleven', 12 => 'twelve'); $size = count($confusion); // $size = 3
Отступы в массивах
Чтобы создать массив, инициализированный некоторыми одинаковыми значениями, мы можем использовать array_pad(). Первый аргумент — массив, второй аргумент — минимальное количество элементов, которое мы хотим, чтобы было в массиве, и третий аргумент — значение, которое будет присвоено всем новым в массиве элементам.
Функция array_pad() вернет новый массив:
$scores = array(5, 10); $padded = array_pad($scores, 5, 0); // $padded сейчас array(5, 10, 0, 0, 0)
Заметьте, как новые элементы добавились в конец массива. Если вы хотите добавить новые элементы в начало массива, используйте отрицательный второй аргумент:
$padded = array_pad($scores, -5, 0);
Если вы используете ассоциативный массив, то новые элементы будут начинаться с нулевого индекса.
Многомерные массивы
Значения в массиве сами могут быть массивами. Это позволяет легко создавать многомерные массивы:
$row_0 = array(1, 2, 3); $row_1 = array(4, 5, 6); $row_2 = array(7, 8, 9); $multi = array($row_0, $row_1, $row_2);
Вы можете ссылаться на элементы многомерных массивов путем добавления дополнительных [ ]:
$value = $multi[2][0]; // строка 2, колонка 0. $value = 7
Для печати многомерных массивов, необходимо заключить весь массив в фигурные скобки:
echo("Значение строки 2, колонки 0 равно {$multi[2][0]}\n");
Если не использовать фигурные скобки, то результат будет примерно такой:
Значение строки 2, колонки 0 равно Array[0]
Извлечение нескольких значений из массива
Для копирования всего массива в переменную, можно использовать функцию list():
list($variable, ...) = $array;
Значения массива копируются в списочную переменную, в порядке индексов массива. По умолчанию, это порядок, в котором элементы были вставлены в массив, но сортировочные функции, описанные ниже позволят вам изменить данный порядок. Вот пример:
$person = array('name' => 'Fred', 'age' => 35, 'wife' => 'Betty'); list($n, $a, $w) = $person; // $n = 'Fred', $a = 35, $w = 'Betty'
Если у вас в массиве элементов больше, чем в list(), то они будут проигнорированы:
$person = array('name' => 'Fred', 'age' => 35, 'wife' => 'Betty'); list($n, $a) = $person; // $n = 'Fred', $a = 35
Если в массиве элементов меньше, чем в list(), недостающие элементы будут равны NULL:
$values = array('hello', 'world'); list($a, $b, $c) = $values; // $a = 'hello', $b = 'world', $c = NULL
Две и более запятые подряд в list() обозначают, что элемент будет пропущен в массиве:
$values = range('a', 'e'); // 'a', 'b', 'c', 'd', 'e' list($m,,$n,,$o) = $values; // $m = 'a', $n = 'c', $o = 'e'
Ключи и значения
Функция array_keys() возвращает массив, содержащий только ключи массива:
$array_of_keys = array_keys(array);
Посмотрим пример:
$person = array('name' => 'Fred', 'age' => 35, 'wife' => 'Wilma'); $keys = array_keys($person); // $keys = array('name', 'age', 'wife')
PHP так же содержит функцию array_values(), которая возвращает из массива только его значения:
$array_of_values = array_values(array);
array_values() возвращает значения во внутреннем порядке элементов массива, как и функция array_keys():
$values = array_values($person); // $values = array('Fred', 35, 'Wilma');
Проверка существования элемента в массиве
Чтобы узнать, существует ли элемент в массиве, мы можем использовать функцию array_key_exists():
if (array_key_exists(key, array)) { ... }
Нам вернется булево значение true или false, что символизирует, есть ли key в массиве array.
Можно, конечно, сделать по-другому, но метод ниже может ввести в заблуждение:
if ($person['name']) { ... }
Даже, если есть элемент в массиве с именем ключа, значение может быть ложным (т. е. 0, NULL или пустая строка). Вместо этого, используйте array_key_exists() следующим образом:
$person['age'] = 0; // не родился? if ($person['age']) { echo "true!\n"; } if (array_key_exists('age', $person)) { echo "exists!\n"; } //exists!
Многие используют функцию isset(), которая возвращает true, если элемент существует и не равен NULL:
$a = array(0,NULL,''); function tf($v) { return $v ? "true" : "false"; } for ($i=0; $i < 4; $i++) printf("%d: %s %s\n", $i, tf(isset($a[$i])), tf(array_key_exists($i, $a))); } // 0: true true // 1: false true // 2: true true // 3: false false
Заключение
В данной статье мы обсудили многомерные массивы, извлечение элементов из массива, получение размера массива, проверку существования элемента в массиве, диапазоны. Надеюсь, что объяснение было понятно изложено.
Если у вас остались вопросы — задавайте их в комментариях!
В следующей статье мы обсудим удаление и вставку элементов в массив, конвертирование между переменными и массивами, создание массива из переменных.
Спасибо за внимание! Подписываемся на рассылку! 😉