检查数组中的空值

时间:2013-01-30 12:19:38

标签: php cakephp-2.3

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

Array
(
    [id] => 1
    [username] => hank
    [password] => c9f3fa9ff1cc03389b960f877e9c909e6485ag6h
    [email] => user_email@hotmail.com
    [country] => 
    [city] =>
    [phone] => 666666666
    [other] =>
)

我想知道某些字段是NULL还是空(如countrycity)。 我试过这个:

在我的控制器中:

...
$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中的任何字段是空还是空。

2 个答案:

答案 0 :(得分:1)

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

$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_filter会删除所有等同于false的值。

修改Here's an example

答案 1 :(得分:0)

似乎你以错误的方式使用in_array。

我建议迭代$ 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;?>