也可用於除錯,快速顯示一堆變數及其值
<?php
print_r(compact(explode(' ', 'count acw cols coldepth')));
?>
會顯示
陣列
(
[count] => 70
[acw] => 9
[cols] => 7
[coldepth] => 10
)
(PHP 4, PHP 5, PHP 7, PHP 8)
compact — 建立包含變數及其值的陣列
建立一個包含變數及其值的陣列。
對於每個變數名稱,compact() 會在目前的 符號表 中尋找具有該名稱的變數,並將其添加到輸出陣列中,使變數名稱成為鍵,變數的內容成為該鍵的值。簡而言之,它的作用與 extract() 相反。
注意:
在 PHP 7.3 之前,任何未設定的字串都會被靜默忽略。
var_name
var_names
compact() 函式接受不定數量的參數。每個參數可以是一個包含變數名稱的字串,或者是一個變數名稱的陣列。該陣列還可以包含其他變數名稱的陣列;compact() 會遞迴處理它。
返回包含所有已添加變數的輸出陣列。
如果給定的字串參照到一個未設定的變數,compact() 會發出一個 E_WARNING
等級的錯誤。
版本 | 說明 |
---|---|
8.0.0 | 如果給定的字串參照到一個未設定的變數,現在會發出一個 E_WARNING 等級的錯誤。 |
7.3.0 |
compact() 現在會在給定的字串參照到一個未設定的變數時發出一個 E_NOTICE 等級的錯誤。以前,這樣的字串會被靜默略過。 |
範例 #1 compact() 範例
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", $location_vars);
print_r($result);
?>
上述範例將輸出:
Array ( [event] => SIGGRAPH [city] => San Francisco [state] => CA )
也可用於除錯,快速顯示一堆變數及其值
<?php
print_r(compact(explode(' ', 'count acw cols coldepth')));
?>
會顯示
陣列
(
[count] => 70
[acw] => 9
[cols] => 7
[coldepth] => 10
)
考慮以下兩個例子。第一個例子如同在手冊中的用法,第二個例子則略有不同。
範例 #1
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", $location_vars);
print_r($result);
?>
以上範例 #1 的輸出結果為
陣列
(
[event] => SIGGRAPH
[city] => San Francisco
[state] => CA
)
範例 #2
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", "location_vars");
print_r($result);
?>
以上範例 #2 的輸出結果為
陣列
(
[event] => SIGGRAPH
[location_vars] => 陣列
(
[0] => city
[1] => state
)
)
在第一個例子中,變數 $location_values 的值(它是一個包含 city 和 state 的陣列)被傳遞給 compact() 函式。
在第二個例子中,變數 $location_vars 的名稱(也就是沒有 '$' 符號)作為字串被傳遞給 compact() 函式。我希望這能進一步闡明手冊中的說明。
所以 compact('var1', 'var2') 與 array('var1' => $var1, 'var2' => $var2) 的作用相同,只要 $var1 和 $var2 都已設定。
如果您必須使用這個函式,但又知道某個變數可能未設定,那麼您需要使用替代方法。
因此,不要使用以下程式碼
<?php
$var1 = "lorem";
$var2 = "ipsum";
$result = compact('var1', 'var2', 'unsetvar');
?>
請考慮以下程式碼
<?php
$var1 = "lorem";
$var2 = "ipsum";
$result = [];
foreach( ['var1', 'var2', 'unsetvar'] as $attr ) {
if ( isset( $$attr ) ) {
$result[ $attr ] = $$attr;
}
}
?>