当返回true codeigniter时,empty函数返回false

时间:2018-05-08 06:31:32

标签: php arrays codeigniter is-empty

我正在建立一个交付网站。

如果您有帐户,有关递送详细信息,您有2个选项:

  1. 使用帐户投放详细信息(在注册时完成)
  2. 使用不同的送货详情(您可以在购物车中完成)
  3. 我正在进行这些验证:

    用户已登录?如果是,请验证他是否输入了一些新的投放详细信息(我使用POST来获取值并使用它们制作数组 - $data_pos)。如果他输入了,所以empty($data_pos)将是false,使用他的名字(来自帐户)和总价格创建一个新数组,然后在数据库中插入订单。

    如果用户未登录,则需要完成详细信息以继续。

    问题在于,即使$data_pos(他可以完成以覆盖帐户投放详细信息的投放详情)为空,但empty函数始终为false所以,即使他什么也没有进入,也会说他输了一些东西。

    注意:这是我对print_r一个数组和死的函数。只是调试目的。

    echo '<pre>';
          print_r($data);
    die();
    

    型号:

            if($this->session->userdata('logged_in')){
                $data_pos = array(
                    'telephone' => $this->input->post('phone_pos'),
                    'address' => $this->input->post('address_pos'),
                    'details' => $this->input->post('details'),
                );
                if(empty($data_pos) == false){
                    $data = array(
                        'client_name' => $this->session->userdata('email'),
                        'telephone' => $this->input->post('phone_pos'),
                        'address' => $this->input->post('address_pos'),
                        'details' => $this->input->post('details'),
                        'price' => $this->cart->total(),
                    );
                    echo '<pre>';
                        print_r($data_pos);
                        echo 'second array is not empty';
                    die("\n".'die in '. __FILE__ . ' at line '. __LINE__);
                }else{
                    $data = array(
                        'client_name' => $this->session->userdata('email'),
                        'telephone' => $this->session->userdata('phone'),
                        'address' => $this->session->userdata('address'),
                        'details' => $this->input->post('details'),
                        'price' => $this->cart->total(),
                    );
                    echo '<pre>';
                        print_r($data);
                        echo 'i take informations from account beacuse the second array is empty';
                    die("\n".'die in '. __FILE__ . ' at line '. __LINE__);
                }
            }
    

4 个答案:

答案 0 :(得分:3)

使用array_filter检查空值

替换你的代码

  

if(empty($ data_pos)== false){

if(array_filter($data_pos)){
    // true
}else{
    // false
}

如果要检查3个字段不应为空值,请添加如下,

if(count(array_filter($data_pos)) == 3){

答案 1 :(得分:3)

问题是您正在为阵列填充他们输入的详细信息,即使他们没有输入任何数据。键将在数组中带有空值,因此数组中将有内容...

$data_pos = array(
    'telephone' => $this->input->post('phone_pos'),
    'address' => $this->input->post('address_pos'),
    'details' => $this->input->post('details'),
);
if(empty($data_pos) == false){

您可以做的一种方法是过滤输入以删除空白值

$data_pos = array(
    'telephone' => $this->input->post('phone_pos'),
    'address' => $this->input->post('address_pos'),
    'details' => $this->input->post('details'),
);
$data_pos = array_filter($data_pos);
if(empty($data_pos) == false){

答案 2 :(得分:2)

那是因为如果你只是声明一个带有前一行中定义的键的数组,那么它永远不会是空的。

        $data_pos = array(
            'telephone' => $this->input->post('phone_pos'),
            'address' => $this->input->post('address_pos'),
            'details' => $this->input->post('details'),
        );

即使输入为NULL,此数组也不为空。您只需创建按键电话,地址和详细信息,以便......不为空。

答案 3 :(得分:-1)

您遇到此问题,因为在检查 empty()之前初始化数组。

$data_pos = array(
    'telephone' => $this->input->post('phone_pos'),
    'address' => $this->input->post('address_pos'),
    'details' => $this->input->post('details')
);