So compact('var1', 'var2') is the same as saying array('var1' => $var1, 'var2' => $var2) as long as $var1 and $var2 are set.
(PHP 4, PHP 5, PHP 7)
compact — 建立一个数组,包括变量名和它们的值
创建一个包含变量与其值的数组。
对每个参数,compact() 在当前的符号表中查找该变量名并将它添加到输出的数组中,变量名成为键名而变量的内容成为该键的值。简单说,它做的事和 extract() 正好相反。返回将所有变量添加进去后的数组。
Note:
在 PHP 7.3 之前版本,未设置的字符串会被静默忽略。
varname1
compact() 接受可变的参数数目。每个参数可以是一个包括变量名的字符串或者是一个包含变量名的数组,该数组中还可以包含其它单元内容为变量名的数组, compact() 可以递归处理。
返回输出的数组,包含了添加的所有变量。
如果字符串指向的变量未定义,compact() 会产生 E_NOTICE 级错误。
版本 | 说明 |
---|---|
7.3.0 | 现在,如果字符串指向的变量未定义,compact() 会产生 E_NOTICE 级错误。 在此之前,此类问题会静默忽略掉。 |
Example #1 compact() 例子
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", "nothing_here", $location_vars);
print_r($result);
?>
以上例程会输出:
Array ( [event] => SIGGRAPH [city] => San Francisco [state] => CA )
So compact('var1', 'var2') is the same as saying array('var1' => $var1, 'var2' => $var2) as long as $var1 and $var2 are set.
The description says that compact is the opposite of extract() but it is important to understand that it does not completely reverse extract(). In particluar compact() does not unset() the argument variables given to it (and that extract() may have created). If you want the individual variables to be unset after they are combined into an array then you have to do that yourself.
Can also handy for debugging, to quickly show a bunch of variables and their values:
<?php
print_r(compact(explode(' ', 'count acw cols coldepth')));
?>
gives
Array
(
[count] => 70
[acw] => 9
[cols] => 7
[coldepth] => 10
)