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