當前位置: 首頁> 最新文章列表> 使用PHP的compact函數時,如何有效處理空值或null值?

使用PHP的compact函數時,如何有效處理空值或null值?

gitbox 2025-08-22

1. compact()函數的基本用法

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是一個或多個字符串,表示要轉化為數組的變量名。返回值是一個包含變量名及其對應值的關聯數組。如果某個變量未定義或者其值為nullcompact()仍會將該變量包含在返回的數組中。

舉個例子:

 <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] =&gt; John
    [age] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [city] =&gt; New York
)
</span></span>

在這個例子中, compact()函數成功將三個變量打包成一個數組。

2. compact()如何處理null

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] =&gt; 
    [age] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [city] =&gt; New York
)
</span></span>

如上所示, name的值是null ,但仍然出現在數組中,並且值為null

3. 過濾掉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] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [city] =&gt; New York
)
</span></span>

通過array_filter()null值的name被從結果中去除,最終只保留了有效的agecity

4. 定製過濾規則

如果你想更加精確地控製過濾規則(比如將空字符串或零也從結果中過濾掉),可以在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> &amp;&amp; </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] =&gt; </span><span><span class="hljs-number">25</span></span><span>
)
</span></span>

在這個例子中,回調函數確保了只有非null且非空字符串的值才會保留在最終的數組中。

5. 如何處理未定義的變量

如果在調用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] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [city] =&gt; New York
)
</span></span>

在上述例子中,由於$name未定義,它沒有出現在返回的數組中。

6. 總結

compact()是PHP中一個非常有用的函數,它將變量轉化為關聯數組。在處理null值時, compact()會將這些變量包含在數組中,且值為null 。如果不希望數組中包含null或空值,可以通過array_filter()函數進行過濾,甚至可以定義自定義過濾規則以實現更細粒度的控制。

通過這些技巧,我們可以在使用compact()時更靈活地處理變量,確保返回的數組符合我們的需求。

  • 相關標籤:

    null