2013-10-05 91 views
2

我試圖獲取變量列表到一個數組中(對於錯誤報告類),但是如果該變量沒有設置,它就不會被「壓縮」。compact()不添加空變量

下面是代碼的提取物:

$testVar1 = 123; 
$testVar2 = 'ABC'; 

$ErrorArray = compact('testVar1', 'testVar2', 'notSetVar'); 

我再通過$ ErrorArray下地行走:

foreach($ErrorArray as $key => $value) { 
    $TempErrorMessage .= '$'.$key.' == '.$value.' ---- '; 
} 

輸出的結果是:

$ testVar1 == 123 ---- $ testVar2 == ABC ----

問題是,我想輸出「notSetVar」爲「」/ NULL,因爲這可能是我的錯誤所在......

任何建議都會大受歡迎!

此致 福特

+0

['compact()'](http://php.net/compact)不會發出警告,如果變量未定義:'任何未設置的字符串都將被忽略。考慮編寫你自己的函數。 – BlitZ

+0

SetVar從哪裏來? –

+0

notSetVar不是來自任何地方,它只是我的一個!issset變量的示例(在所有的誠實中都不應該存在,但是因爲這是錯誤報告,所以我可能會發現我錯過了一個或系統錯誤導致它不能被正確設置) – Ford

回答

1

根據PHP DOC http://php.net/manual/en/function.compact.php

緊湊創建包含變量和它們的值的數組。

對於其中的每一個,compact()都會在當前符號表中查找具有該名稱的變量,並將其添加到輸出數組中,以便變量名稱變爲關鍵字,並且該變量的內容將成爲該變量的值鍵。總之,它與extract()相反。

任何未設置的字符串都將被跳過。

因此,不可能通過緊湊型變量傳遞變量,除非它被設置。我的建議是,在compact()之前檢查變量。

$testVar1 = 123; 
    $testVar2 = 'ABC'; 
    if (!isset($notSetVar) { 
    $notSetVar = null; 
    } 

    $ErrorArray = compact('testVar1', 'testVar2', 'notSetVar'); 

var_dump($ErrorArray); 
+0

謝謝你,我沒有看到「沒有設置任何字符串將被忽略的部分」。我的錯。我會以另一種方式工作:-) – Ford