PHP检查是否设置了数组值

时间:2011-05-27 00:03:50

标签: php arrays function

我有以下功能:

public function insertMember($username, $password, $fname, $lname)
    {
        $param              = array();
        $param['username']  = $username;
        $param['password']  = $password;
        $param['fname']     = $fname;
        $param['lname']     = $lname;
        return (count(array_filter($param, 'strlen')) == 0) ? FALSE : $this->insertIntoDB($param);
    }

使用(count(array_filter($param, 'strlen')) == 0)正确/最佳方式检查所有变量$username, $password, $fname, $lname是否已传递给函数?

谢谢,
PAV

6 个答案:

答案 0 :(得分:1)

也许是对的,但不是最好的 如果您需要检查所有变量:

if (empty($username) || empty($password) || empty($fname) || empty($lname)) return false;

答案 1 :(得分:1)

您可以省略'strlen'参数,array_filter的默认行为在这种情况下可以正常工作。这样代码就会缩短一点。

但是,作为一种风格问题,您可能需要考虑明确的

if (empty($username) || empty($password) || ...)

因为它更容易向读者传达关于其论点的功能要求。

答案 2 :(得分:1)

为什么不早点检查?做到这样:

public function insertMember($username, $password, $fname, $lname) {
    if (!$username || !$password || !$fname || !lname) {
        return false;
    } else {
        $param = array();
        $param['username'] = $username;
        $param['password'] = $password;
        $param['fname'] = $fname;
        $param['lname'] = $lname;
        return $this->insertIntoDB($param);
    }
}

答案 3 :(得分:1)

这不会检查数据的有效性,但是:

// Do something if 4 (all) arguments were passed in
if(func_num_args() == 4) {
}

答案 4 :(得分:1)

我不喜欢使用array_filter,因为通过名称传递函数会感觉很脏。虽然如果你使用stdlib函数,它可能没问题。

我会使用循环

foreach ($param as $v) {
    if (empty($v)) return false;
}

答案 5 :(得分:1)

您无法真正检查变量是否已传递给函数,您只能检查它们的值。如果值为 falsey ,您可以拒绝它。这并不一定意味着该变量未被传递,只是该值为 falsey

if (!$username || !$password || !$fname || !$lname)

要进一步限制它并接受例如空字符串和0作为有效值,请执行以下操作:

public function insertMember($username = null, $password = null, $fname = null, $lname = null) {
    if ($username === null || $password === null || $fname === null || $lname === null)

最好的方法是接受一个数组,无论它们的值如何,你都可以明确地测试它是否存在:

public function insertMember($values) {
    if (array_diff_key(array_flip(array('username', 'password', 'fname', 'lname')), $values)) {
        // not all keys were set!
    }

无论如何:

$param             = array();
$param['username'] = $username;
$param['password'] = $password;
$param['fname']    = $fname;
$param['lname']    = $lname;

可缩短为:

$params = compact('username', 'password', 'fname', 'lname');