PHP - 如果数组键存在且不为空

时间:2015-04-11 13:48:21

标签: php arrays

我得到了以下数组

(
    [0] => 1
    [1] => John Doe
    [2] => john
    [3] => john@doe.com
    [4] => lorem
    [5] => Lorem, Ipsum Dolor Sit Amet
)

基本上我是从CSV文件中读取这些值,我想在插入数据库之前验证数据,这里是我要申请的基本验证

  • 检查数组是否包含6个元素
  • 所有字段均为必填字段

这就是我在做的事情:

if (count($value) == 6) {
    $params = array(
        'id' => array_key_exists(0, $value) && !empty($value[0]) ? $value[0]: null,
        'name' => array_key_exists(1, $value) && !empty($value[1]) ? $value[1]: null,
        'username' => array_key_exists(2, $value) && !empty($value[2]) ? $value[2]: null,
        'email' => array_key_exists(3, $value) && !empty($value[3]) ? $value[3]: null,
        'password' => array_key_exists(4, $value) && !empty($value[4]) ? $value[4]: null,
        'position' => array_key_exists(5, $value) && !empty($value[5]) ? $value[5]: null
    );
}

我想知道,处理这个问题的更好方法是什么?我不喜欢的是重复,也许我可以把它放在一个循环中来解决,我想知道你会怎么做?

感谢。

2 个答案:

答案 0 :(得分:6)

只需使用array_map()检查值是否为空,并使用键array_combine(),如下所示:

if(count($value) == 6) {
    $params = array_combine(["id", "name", "username", "email", "password", "position"], array_map(function($v) {
        return ( !empty($v) ? $v : NULL );
    }, $value));
}

答案 1 :(得分:0)

一种方法是使用array_merge(),你可以制作这样的函数:

public function merge_my_array($params = []){

  return array_merge(
    [
      'id' => null,
      'name' => null,
      'username' => null,
      'email' => null,
      'password' => null,
      'position' => null
    ], $params);
}

现在如果你这样调用函数:

$array = merge_my_array(['id'=>1, 'name'=>'John', 'email'=>'john@gmail.com']);

变量$ array将具有:

id 1,姓John,电子邮件john@gmail.com,所有其他属性为null。

如果你在没有传递参数的情况下调用函数就可以了,它不是必需的,它将返回一个数组,其中所有这六个属性都为null。像这样:

$array = merge_my_array();