array compact(mixed $vn1 [, mixed $vn2, …])
Функция compact(), впервые появившаяся в PHP версии 4, упаковывает в массив переменные из текущего контекста (глобального или контекста функции), заданные своими именами в $vn1, $vn2
и т.д. При этом в массиве образуются пары с ключами, равными содержимому $vnN, и значениями соответствующих переменных. Вот пример использования этой функции:
$a="Test string";
$b="Some text";
$A=compact("a","b");
// òåïåðü $A===array("a"=>"Test string", "b"=>"Some text")
Почему же тогда параметры функции обозначены как mixed? Дело в том, что они могут быть не только строками, но и списками строк. В этом случае функция последовательно перебирает все элементы этого списка, и упаковывает те переменные из текущего контекста, имена которых она встретила. Более того — эти списки могут, в свою очередь, также содержать списки строк, и т. д. Правда, последнее используется сравнительно редко, но все же вот пример:
$a="Test";
$b="Text";
$c="CCC";
$d="DDD";
$Lst=array("b",array("c","d"));
$A=compact("a",$Lst);
// òåïåðü $A===array("a"=>"Test", "b"=>"Text", "c"=>"CCC", "d"=>"DDD")
void extract(array $Arr [, int $type] [, string $prefix])
Эта функция производит действия, прямо противоположные compact().
А именно, она получает в параметрах массив $Arr
и превращает каждую его пару ключ=>значение в переменную текущего контекста.
Параметр $type предписывает, что делать, если в текущем контексте уже существует переменная с таким же именем, как очередной ключ в $Arr. Он может быть равен одной из констант, перечисленных в табл. 13.1
Таблица 13.1. Поведение функции extract в случае совпадения переменных
Константа |
Действие |
EXTR_OVERWRITE |
Переписывать существующую переменную (по умолчанию) |
EXTR_SKIP |
Не перезаписывать переменную, если она уже существует |
EXTR_PREFIX_SAME |
В случае совпадения имен создавать переменную с именем, предваренным префиксом из $prefix. Надо сказать, что на практике этот режим должен быть совершенно бесполезен |
EXTR_PREFIX_ALL |
Всегда предварять имена создаваемых переменных префиксом $prefix |