Php 检查数组中的空值

Php 检查数组中的空值,php,cakephp-2.3,Php,Cakephp 2.3,我有了下一个数组(CakePHP数组): 我想知道某些字段是空的还是空的(比如country或city)。 我试过这个: 在我的控制器中: ... $user = $this->User->findById($id); $this->set('user', $user['User']); # $user['User'] returns the array seen before. 在我看来 <?php $fields = array('country', 'city',

我有了下一个数组(CakePHP数组):

我想知道某些字段是空的还是空的(比如
country
city
)。 我试过这个:

在我的控制器中:

...
$user = $this->User->findById($id);
$this->set('user', $user['User']); # $user['User'] returns the array seen before.
在我看来

<?php $fields = array('country', 'city', 'phone'); ?>
<?php if (!in_array($fields, $user, true)): ?>
   <p>Bad, some fields of $fields are empty</p>
<?php else: ?>
  <p>Ok</p
<?php endif;?>

不好,$字段的某些字段为空


好的在你的情况下,你想要这样的东西:

$fields = array('country', 'city', 'phone');
$check = array_filter(array_intersect_key($user, array_flip($fields)));

if (count($check) !== count($fields)) {
    // Bad; some fields are empty
} else {
    // OK
}
您还可以传递自定义筛选函数;默认情况下,
array\u filter
删除任何等于
false
的值


编辑:。

在您的情况下,您需要以下内容:

$fields = array('country', 'city', 'phone');
$check = array_filter(array_intersect_key($user, array_flip($fields)));

if (count($check) !== count($fields)) {
    // Bad; some fields are empty
} else {
    // OK
}
您还可以传递自定义筛选函数;默认情况下,
array\u filter
删除任何等于
false
的值


编辑:。

似乎在数组中使用了错误的方式

我建议迭代$fields并检查$user中的值:

<?php $bad_fields = false; ?>
<?php $fields = array('country', 'city', 'phone'); ?>
<?php foreach($fields as $field): ?>
<?php if !$user[$field]: ?>
<?php $bad_fields = true; ?>
<?php endif; ?>
<?php endforeach; ?>
<?php if $bad_fields: ?>
    <p>Bad, some fields of $fields are empty</p>
<?php else: ?>
<p>Ok</p>
<?php endif;?>

不好,$字段的某些字段为空


似乎您在数组中使用了错误的方式

我建议迭代$fields并检查$user中的值:

<?php $bad_fields = false; ?>
<?php $fields = array('country', 'city', 'phone'); ?>
<?php foreach($fields as $field): ?>
<?php if !$user[$field]: ?>
<?php $bad_fields = true; ?>
<?php endif; ?>
<?php endforeach; ?>
<?php if $bad_fields: ?>
    <p>Bad, some fields of $fields are empty</p>
<?php else: ?>
<p>Ok</p>
<?php endif;?>

不好,$字段的某些字段为空


尝试使用这个答案,一个自定义的构建函数:
在数组中检查数组值,而不是键,它以字符串作为指针,而不是数组。@Gordon你的意思是
如果(count(array\u filter($fields))!==count($array))
?@cbuckley needle可能是数组中关于
签名的数组注释不相关;这里使用的函数不正确。请尝试使用此答案,一个自定义生成函数:
in_array
检查数组值,而不是键,它以字符串作为指针,而不是数组。@Gordon你的意思是
if(count(array_filter($fields))!==count($array))
?@cbuckley needle可能是一个数组,数组中关于
签名的所有注释都是无关的;这里使用的函数不正确。谢谢,我知道我可以在$fields上迭代,但我在寻找不同的函数。谢谢,我知道我可以在$fields上迭代,但我在寻找不同的函数。