1

次の配列 (CakePHP 配列) があります。

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

countryそして、特定のフィールドが NULL か空か (または など)を知りたいです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が NULL または空かどうかを知る必要があります。

4

2 に答える 2

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

編集ここに例があります。

于 2013-01-30T12:31:07.340 に答える
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;?>
于 2013-01-30T12:31:52.340 に答える