我有一个相当简单的问题,我需要查看 php 中数组的关联数组是否为空。我的数组看起来像这样:
array (
'person1' =>
array (
),
'person2' =>
array (
),
'person3' =>
array (
),
)
就我而言,三个人的三个数组没有任何内容,所以我需要测试它是否为空。我已经这样做了,有效:
if ( empty($form_values['person1']) && empty($form_values['person2']) && empty($form_values['person3'] ) ){
echo 'values empty!!';
}
但我希望使用如下的空来更干净一些:
if (empty( $form_values )) {
echo 'HI!';
}
您可以使用
array_filter()
来过滤所有空数组元素。然后您可以使用 empty
检查结果是否为空。
我已经简化了数组,因此更容易阅读,因为数组是空的。
array()
效果相同。
$form_values = [
'person1' => [],
'person2' => [],
'person3' => []
];
if (empty(array_filter($form_values))) {
// empty
} else {
// not empty
}
如果您正在寻找单行代码,那么您可以这样做:
$form_values = array (
'person1' =>
array (
),
'person2' =>
array (
),
'person3' =>
array (
),
);
if(array_sum(array_map(function($v){return !empty($v);}, $form_values)) === 0)
{
// empty
}
else
{
// not empty
}
使用循环来测试每个嵌套数组。如果没有一个非空,则整个数组为空。
$is_empty = true;
foreach ($form_values as $val) {
if (!empty($val)) {
$is_empty = false;
break;
}
}
<?php
$data =
[
'pig' => [],
'hog' => [],
'sow' => []
];
$all_empty = array_filter($data) === [];
var_dump($all_empty);
输出:
bool(true)
来自 array_filter 的手册:
如果未提供回调,则数组的所有空条目都将被 已删除。请参阅empty() 了解 PHP 在这种情况下如何定义空。
请注意,如果某个项目被视为空(例如空字符串),它仍然会返回 true。这个测试可能不够严格。
更明确地说:
if (array_filter($data, function($v) {return $v !== []; }) === []) {}
过滤掉所有不是空数组的项目。如果所有项目都是空数组,那么我们剩下的就是一个空数组。
或搜索比较:
if (array_keys($data, []) == array_keys($data)) {}
检查属于包含空数组的项的键是否与数组的键匹配。或者更确切地说,所有项目(如果存在)都是空数组。
请注意,空数组也将满足上述三个解决方案。
我想检查关联数组是否为空。尝试
$arr = array(
'street' => null,
'city' => '',
);
var_dump(empty(array_diff($arr, array(null))));