PHP:检查键值不为空

PHP:检查键值不为空,php,arrays,key-value,Php,Arrays,Key Value,我写了一个小函数来检查表单的必填字段是否为空。 该函数接受两个参数,第一个参数是一个数组,包含来自$\u POST superglobal的所有值。 第二个是我填充的必填字段数组 看看: public $errors = array(); public function validate_fields($fields_array, $required_fields) { foreach ($required_fields as $key => $value) {

我写了一个小函数来检查表单的必填字段是否为空。 该函数接受两个参数,第一个参数是一个数组,包含来自$\u POST superglobal的所有值。 第二个是我填充的必填字段数组

看看:

public $errors = array();

public function validate_fields($fields_array, $required_fields) 
{
    foreach ($required_fields as $key => $value)
    {
        if (array_key_exists($key, $fields_array)) 
        {
            # If key exists in $fields_array
            # check that the key value inside $fields_array is set & isn't empty
            # if it's empty, populate with an error
            if(empty($fields_array[$key][$value]))
            {
                $this->errors[] = "{$key} is empty but in fields_array";
            }
        }
        else 
        {
            # Key does not exists in $fields_array
            # Did someone temper with my html ?
            $this->errors[] = "{$key} is not in fields_array";
        }
    }
    return (empty($this->errors)) ? true : false;
}     
我遇到的问题似乎与“if(空($fields\u数组[$key][$value])”有关
陈述我的目标是根据$required\u fields键检查$fields\u数组键值是否为空。我确信我使用的声明是无效的。如果你看到任何你认为可以写得更好的东西,请让我知道,因为我是php新手。感谢您的帮助。

您不需要选择值作为索引键。其中$fields\u数组[$key]=$value

if(empty($fields_array[$key]) && trim($fields_array[$key]) != '')

我想你想做的是:

if(empty($fields_array[$key])) {
    //this means value does not exist or is FALSE
}
如果您还想只检查空字符串或空白,那么您需要的不仅仅是空字符串。例如

if(empty($fields_array[$key]) || !trim($fields_array[$key]))         {
    //this means key exists but value is null or empty string or whitespace only
}

请注意,上述答案仅适用于>PHP5.4中的索引数组。如果有关联数组,则必须使用isset而不是空数组:

if(isset($fields_array[$key]) && trim($fields_array[$key]) != '')

参见示例2,你好,理查德,谢谢!我不知道空格上的empty返回false。再次感谢。顺便说一下,这就是我填充必填字段数组的方式:$required\u fields=array(“email”=>,“email\u confirm”=>);是否有一种更快的方法来设置仅使用键的数组,而不是定义键+空值?$required\u fields=array\u fill\u keys(数组(“email”、“email\u confirm”、“…”)、“);谢谢,这让它干净了一点。我看到你比Richard增加了一些条件,不会使用空的和空的!修剪覆盖我想要避免的一切?(任何空字符串或空格)只要小心empty(),它会将0或“0”之类的内容视为“空”,在某些情况下,这可能不是您想要的。有关详细信息,请参见中的注释。可能最好明确检查您想要的条件。我想不出任何理由希望用户在表单中输入0、“0”,甚至“-0”。尽管我在register中有两个性别单选按钮,但我会将它们分配到db中的1和2。如果我的逻辑错误,请更正:)我会将它们分配给男性/女性或m/f。即使在没有任何上下文的情况下查看数据库,也很容易阅读。