PHP: Arrays (массивы), основы. Часть 2.

В предыдущей статье было рассказано, как создать массив и добавить в него новый элемент. Сейчас мы обсудим некоторые новые функции.

 

Выделение диапазона значений

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

 

Заключение

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

Если у вас остались вопросы — задавайте их в комментариях!

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

 

Спасибо за внимание! Подписываемся на рассылку! 😉

 

Автор статьи: Alex. Категория: PHP
Дата публикации: 11.04.2013