简化陈述的最佳方法

时间:2015-01-04 05:45:17

标签: php syntax

我有以下php代码。

我试图在不使用硬编码静态文本的情况下找出不存在的字段名称/密钥。有没有可以做到这一点的PHP功能。 array_keys_exist与我想要的类似,但它只允许检查单个密钥。

例如:

这样的东西
$keys_to_confirm = ['password','password_old',....];

$user_submitted_input_array = ['password'=>'...', 'somekey'=>'...' ];

bool : all_array_keys_exist($keys_to_confirm,$user_submitted_input_array);

使用静态文本报告缺少字段/密钥名称的当前代码

    if( isset($input['password']))
    {
        if( isset($input['password_old'])) )
        {
            if(isset($input['password_repeat'])) )
            {
                //good to go!
            }
            else
            {
                die('missing form element password_repeat.');
            }
        }
        else
        {
            die('missing form element password_old.');
        }
    }
    else
    {
        die('missing form element password.');
    }

我有这段代码,但它没有说缺少什么。

        //if the field doesnt exist for some reason lets create a dummy
        if( ! isset($input['password']) 
            OR (!isset($input['password_repeat']))
            OR (!isset($input['password_old'])) )
        {
            die('missing form element.');
        }

3 个答案:

答案 0 :(得分:1)

尝试:

foreach( array('password', 'password_repeat', 'password_old') as $key ) {
  if( empty($input[ $key ]) ) {
    echo 'Missing field: ' . $key;
  }
}

你可以使用array_diff_key想出一个单行代码,但我认为上面的内容很简洁。

答案 1 :(得分:1)

这里是array_key_diff的一个班轮。它不是最漂亮但功能性的。

$keys_to_confirm = array('password' => '','password_old' => '');
$user_submitted_input_array = array('password'=>'...', 'somekey'=>'...');

$validate = array_diff_key($keys_to_confirm, $user_submitted_input_array);

if( empty($validate) ) {
    echo 'Passed';
} else {
    echo 'Missing field: ' . key($validate);
}

答案 2 :(得分:0)

我的解决方案:

if ($field_miss = array_diff_key(array('password', 'password_old', '...'), array_keys($input))) {
    echo 'Missing field: ', implode(', ', $field_miss);
}