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

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

Сегодня мы поговорим о создании и удалении элементов из массива, конвертирование между переменными и массивами, создание массива из переменных.

Начнем!

 

Удаление и добавление элементов в массив

Функция array_splice() позволяет удалять или вставлять элементы в массив:

$removed = array_splice(array, start [, length [, replacement ] ]);

Посмотрим, как array_splice() обработает следующий массив:

$subjects = array('physics', 'chem', 'math', 'bio', 'cs', 'drama', 'classics');

Мы можем удалить math, bio, и cs элементы, если вызовем array_splice() и дадим ей параметры, которые говорят, что надо удалить 3 элемента, начиная с позиции 2:

$removed = array_splice($subjects, 2, 3);
// $removed = array('math', 'bio', 'cs'); // удалены из $subjects
// $subjects = array('physics', 'chem', 'drama', 'classics'); // то, что осталось

В массив $removed попадают удаленные элементы. Если параметр length убрать, то будут удалены все элементы, начиная с 2:

$removed = array_splice($subjects, 2);
// $removed is array('math', 'bio', 'cs', 'drama', 'classics'); // удалены
// $subjects is array('physics', 'chem'); // осталось

Если мы хотим просто удалить элементы и не беспокоиться о том, чтобы сохранить удаленные элементы, то просто не будем передавать значение функции array_splice() ни в какую переменную:

array_splice($subjects, 2);
// $subjects is array('physics', 'chem');

Чтобы вставить элементы в массив, будем использовать 4-ый аргумент, который говорит, что 3 элемента с позиции 4 будут удалены (3-ий аргумент) и будет вставлен массив $new в массив $subjects с позиции 4:

$new = array('law', 'business', 'IS');
array_splice($subjects, 4, 3, $new);
// $subjects = array('physics', 'chem', 'math', 'bio', 'law', 'business', 'IS')

Массив растет или сокращается по мере необходимости:

$new = array('law', 'business', 'IS');
array_splice($subjects, 2, 4, $new);
// $subjects = array('physics', 'chem', 'math', 'law', 'business', 'IS')

Мы удалили 4 элемента и вставили 3 с позиции 2. При этом длина массива в итоге оказалась 6, а не 7.

Чтобы просто вставить элементы в массив, передадим в качестве 3-его параметра 0:

$subjects = array('physics', 'chem', 'math');
$new = array('law', 'business');
array_splice($subjects, 2, 0, $new);
// $subjects = array('physics', 'chem', 'law', 'business', 'math')

В итоге длина массива увеличилась на 2.

Хотя примеры были показаны на индексированных массивах, array_splice() так же работает и с ассоциативными массивами:

$capitals = array(
    'USA' => 'Washington',
    'Great Britain' => 'London',
    'New Zealand' => 'Wellington',
    'Australia' => 'Canberra',
    'Italy' => 'Rome'
);
$down_under = array_splice($capitals, 2, 2); // удалить New Zealand и Australia
$france = array('France' => 'Paris');
array_splice($capitals, 1, 0, $france); // вставить France между USA и G.B.

 

 Преобразование между массивами и переменными

PHP поддерживает 2 функции: extract() и compact(), которые конвертируют массивы и переменные между собой.

Имена переменных соответствуют ключам массива, а значения — значениям элементов массива. Например:

$person = array('name' => 'Fred', 'age' => 35, 'wife' => 'Betty');

может быть преобразовано в эти переменные или построено из этих переменных:

$name = 'Fred';
$age = 35;
$wife = 'Betty';

 

Создание переменных из массива

Функция extract() автоматически создает локальные переменные из массива. Индексы массива становятся именами переменных:

extract($person); // появятся переменные $name, $age, и $wife

Если создаваемая переменная уже существует, то она перезапишет существующее значение.

Мы можете модифицировать extract(), передав второй и третий аргумент.

Наиболее полезное значение второго аргумент — EXTR_PREFIX_SAME, которое говорит, что третий аргумент функции extract() является префиксом к именам переменных, которые будут созданы функцией. Это позволяет создавать уникальные переменные. В PHP считается хорошим стилем всегда использовать EXTR_PREFIX_SAME, как показано ниже:

$shape = "round";
$array = array("cover" => "bird", "shape" => "rectangular");
extract($array, EXTR_PREFIX_SAME, "book");
echo "Cover: $book_cover, Book Shape: $book_shape, Shape: $shape";
//Cover: bird, Book Shape: rectangular, Shape: round

 

Создание массивы из переменных

Функция compact() противоположна extract(). Если передать функции имена переменных, то compact() создаст массив, ключами которого будут имена переменных, а значениями — значения переменных. Любые имена, которые не соответствуют актуальным переменным — пропускаются. Вот пример compact():

$color = 'indigo';
$shape = 'curvy';
$floppy = 'none';

$a = compact('color', 'shape', 'floppy');
// или
$names = array('color', 'shape', 'floppy');
$a = compact($names);

 

Заключение

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

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

 

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

 

 

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