В предыдущей статье мы обсудили многомерные массивы, извлечение элементов из массива, получение размера массива, проверку существования элемента в массиве, диапазоны.
Сегодня мы поговорим о создании и удалении элементов из массива, конвертирование между переменными и массивами, создание массива из переменных.
Начнем!
Удаление и добавление элементов в массив
Функция 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);
Заключение
В данной статье мы обсудили создание и удаление элементов из массива, конвертирование между переменными и массивами, создание массива из переменных.
Если у вас остались вопросы — задавайте их в комментариях!
Спасибо за внимание! Подписываемся на рассылку! 😉