compact()函數的基本語法如下:
<span><span><span class="hljs-title function_ invoke__">compact</span></span><span>(...</span><span><span class="hljs-variable">$var_names</span></span><span>)
</span></span>
參數$var_names是一個或多個字符串,表示要轉化為數組的變量名。返回值是一個包含變量名及其對應值的關聯數組。如果某個變量未定義或者其值為null , compact()仍會將該變量包含在返回的數組中。
舉個例子:
<span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">"John"</span></span><span>;
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">25</span></span><span>;
</span><span><span class="hljs-variable">$city</span></span><span> = </span><span><span class="hljs-string">"New York"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">compact</span></span><span>(</span><span><span class="hljs-string">"name"</span></span><span>, </span><span><span class="hljs-string">"age"</span></span><span>, </span><span><span class="hljs-string">"city"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
輸出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[name] => John
[age] => </span><span><span class="hljs-number">25</span></span><span>
[city] => New York
)
</span></span>
在這個例子中, compact()函數成功將三個變量打包成一個數組。
PHP的compact()函數會將值為null的變量包含在返回的數組中,數組中的對應值會是null 。
例如:
<span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">25</span></span><span>;
</span><span><span class="hljs-variable">$city</span></span><span> = </span><span><span class="hljs-string">"New York"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">compact</span></span><span>(</span><span><span class="hljs-string">"name"</span></span><span>, </span><span><span class="hljs-string">"age"</span></span><span>, </span><span><span class="hljs-string">"city"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
輸出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[name] =>
[age] => </span><span><span class="hljs-number">25</span></span><span>
[city] => New York
)
</span></span>
如上所示, name的值是null ,但仍然出現在數組中,並且值為null 。
在某些場景下,我們並不希望null或者空值出現在返回的數組中。為了更好地處理這種情況,可以通過array_filter()函數對compact()的結果進行過濾。 array_filter()可以移除數組中的空值(包括null 、空字符串""等)。
<span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">25</span></span><span>;
</span><span><span class="hljs-variable">$city</span></span><span> = </span><span><span class="hljs-string">"New York"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-title function_ invoke__">compact</span></span><span>(</span><span><span class="hljs-string">"name"</span></span><span>, </span><span><span class="hljs-string">"age"</span></span><span>, </span><span><span class="hljs-string">"city"</span></span><span>));
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
輸出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[age] => </span><span><span class="hljs-number">25</span></span><span>
[city] => New York
)
</span></span>
通過array_filter() , null值的name被從結果中去除,最終只保留了有效的age和city 。
如果你想更加精確地控製過濾規則(比如將空字符串或零也從結果中過濾掉),可以在array_filter()中傳入自定義的回調函數。
例如:
<span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">25</span></span><span>;
</span><span><span class="hljs-variable">$city</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-title function_ invoke__">compact</span></span><span>(</span><span><span class="hljs-string">"name"</span></span><span>, </span><span><span class="hljs-string">"age"</span></span><span>, </span><span><span class="hljs-string">"city"</span></span><span>), function(</span><span><span class="hljs-variable">$value</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span> !== </span><span><span class="hljs-literal">null</span></span><span> && </span><span><span class="hljs-variable">$value</span></span><span> !== </span><span><span class="hljs-string">""</span></span><span>;
});
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
輸出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[age] => </span><span><span class="hljs-number">25</span></span><span>
)
</span></span>
在這個例子中,回調函數確保了只有非null且非空字符串的值才會保留在最終的數組中。
如果在調用compact()時傳入的某些變量未定義,它們會被自動忽略,不會出現在返回的數組中。然而,如果某個變量值為null ,它仍然會出現在結果中。
<span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">25</span></span><span>;
</span><span><span class="hljs-variable">$city</span></span><span> = </span><span><span class="hljs-string">"New York"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">compact</span></span><span>(</span><span><span class="hljs-string">"name"</span></span><span>, </span><span><span class="hljs-string">"age"</span></span><span>, </span><span><span class="hljs-string">"city"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
輸出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[age] => </span><span><span class="hljs-number">25</span></span><span>
[city] => New York
)
</span></span>
在上述例子中,由於$name未定義,它沒有出現在返回的數組中。
compact()是PHP中一個非常有用的函數,它將變量轉化為關聯數組。在處理null值時, compact()會將這些變量包含在數組中,且值為null 。如果不希望數組中包含null或空值,可以通過array_filter()函數進行過濾,甚至可以定義自定義過濾規則以實現更細粒度的控制。
通過這些技巧,我們可以在使用compact()時更靈活地處理變量,確保返回的數組符合我們的需求。
相關標籤:
null