【问题标题】:php codeIgniter how to return null when the array is empty?php codeIgniter如何在数组为空时返回null?
【发布时间】:2015-06-25 09:38:43
【问题描述】:

我正在检查一些条件语句并最终输出一个值。我得到正确的输出。但是当 $query 为空时,我想返回 null。否则会显示 php 错误。当查询为空时,我想摆脱 php 错误。我对此一无所知。如果有人有想法,那将是一个很大的帮助。

这是我的模型方法。

function get_calendar_data($year, $month) {

        $query = $this->db->select('date_cal,title,type,description,telephone_number,advanced_payment_status')->from('reservations')->like('date_cal', "$year-$month", 'after')->order_by('date_cal', "asc")->get();

        if ($query!='') {
            $content = "";
            $lastDay = -1;
            $index = 0;

            foreach ($query->result() as $row) {

                if ($lastDay != intval(substr($row->date_cal, 8, 2))) {
                    if ($index > 0) {
                        if ($content != '') {
                            $cal_data[$lastDay] = $content;
                            $content = '';
                        }
                    }
                    $index = 0;
                }

                if ($row->title == 'RP' && $row->type == 'AM' && $row->advanced_payment_status=='yes') {
                    $content .= '<div class="rp_am_yes" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                } else if ($row->title == 'RP' && $row->type == 'AM' && $row->advanced_payment_status=='no') {
                    $content .= '<div class="rp_am_no" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                } else if ($row->title == 'RP' && $row->type == 'PM' && $row->advanced_payment_status=='yes') {
                    $content .= '<div class="rp_pm_yes" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                } else if ($row->title == 'RP' && $row->type == 'PM' && $row->advanced_payment_status=='no') {
                    $content .= '<div class="rp_pm_no" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                } else if ($row->title == 'GK' && $row->type == 'AM' && $row->advanced_payment_status=='yes') {
                    $content .= '<div class="gk_am_yes" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                } else if ($row->title == 'GK' && $row->type == 'AM' && $row->advanced_payment_status=='no') {
                    $content .= '<div class="gk_am_no" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                } else if ($row->title == 'GK' && $row->type == 'PM' && $row->advanced_payment_status=='yes') {
                    $content .= '<div class="gk_pm_yes" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                }else if ($row->title == 'GK' && $row->type == 'PM' && $row->advanced_payment_status=='no') {
                    $content .= '<div class="gk_pm_no" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                }else{
                    $content .='<div class="add"></div>';
                }


                $lastDay = intval(substr($row->date_cal, 8, 2));
                $index++;
            }

            if ($lastDay != -1 && $content != '') {
                $cal_data[$lastDay] = $content;
            }            
            return $cal_data;
        } else if($query==''){            
            return Null;         
        }
    }

当 $query 为空时,我收到此 php 错误。表示 $query 不为空时输出的返回值。

【问题讨论】:

    标签: php codeigniter if-statement


    【解决方案1】:

    在函数顶部定义$cal_data = NULL;。如果条件不满足,则永远不会定义 $cal_data

    如果它被定义为NULL,那么如果满足条件,它将返回正确的数据,否则NULL

    $cal_data = NULL;
    ... rest of the code ...
    if ($lastDay != -1 && $content != '') {
        $cal_data[$lastDay] = $content;
    }            
    return $cal_data;
    

    【讨论】:

      【解决方案2】:

      确保始终在 try..catch 块中编写与 DB 相关的代码。假设 $db->select 返回数组,可以这样写:

      try{
          if(isset($query) && empty($query)){
              return null;
          }
          <Code line 1>
          <Code line 2>
          <Code line 3>
          ...
      }catch(Exception $e){
          return null; //or what ever you want to return.
      }
      

      【讨论】:

        【解决方案3】:

        还有一件事要记住,您的第一次尝试没有奏效,因为查询永远不会返回空。如果我编写一个从数据库返回零行的查询,$query 将类似于

        CI_DB_mysql_result Object
        (
        [conn_id] => Resource id #40
        [result_id] => Resource id #45
        [result_array] => Array
            (
            )
        
        [result_object] => Array
            (
            )
        
        [custom_result_object] => Array
            (
            )
        
        [current_row] => 0
        [num_rows] => 0
        [row_data] => 
        )
        

        检查数组是否为空的正确方法是调用

        结果()

        查询方法。 那就是

        $query->result();

        将为返回的零行返回一个空数组。

        或者你可以试试看

        $query[num_rows]>0

        希望对您有所帮助。

        【讨论】:

          【解决方案4】:

          使用 num_rows() 函数来获取查询中的行数。

          function get_calendar_data($year, $month) {

              $query = $this->db->select('date_cal,title,type,description,telephone_number,advanced_payment_status')->from('reservations')->like('date_cal', "$year-$month", 'after')->order_by('date_cal', "asc")->get();
              $row_num=$query->num_rows();
              if ($row_num>0) {
                  $content = "";
                  $lastDay = -1;
                  $index = 0;
          
                  foreach ($query->result() as $row) {
          
                      if ($lastDay != intval(substr($row->date_cal, 8, 2))) {
                          if ($index > 0) {
                              if ($content != '') {
                                  $cal_data[$lastDay] = $content;
                                  $content = '';
                              }
                          }
                          $index = 0;
                      }
          
                      if ($row->title == 'RP' && $row->type == 'AM' && $row->advanced_payment_status=='yes') {
                          $content .= '<div class="rp_am_yes" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                      } else if ($row->title == 'RP' && $row->type == 'AM' && $row->advanced_payment_status=='no') {
                          $content .= '<div class="rp_am_no" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                      } else if ($row->title == 'RP' && $row->type == 'PM' && $row->advanced_payment_status=='yes') {
                          $content .= '<div class="rp_pm_yes" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                      } else if ($row->title == 'RP' && $row->type == 'PM' && $row->advanced_payment_status=='no') {
                          $content .= '<div class="rp_pm_no" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                      } else if ($row->title == 'GK' && $row->type == 'AM' && $row->advanced_payment_status=='yes') {
                          $content .= '<div class="gk_am_yes" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                      } else if ($row->title == 'GK' && $row->type == 'AM' && $row->advanced_payment_status=='no') {
                          $content .= '<div class="gk_am_no" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                      } else if ($row->title == 'GK' && $row->type == 'PM' && $row->advanced_payment_status=='yes') {
                          $content .= '<div class="gk_pm_yes" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                      }else if ($row->title == 'GK' && $row->type == 'PM' && $row->advanced_payment_status=='no') {
                          $content .= '<div class="gk_pm_no" id="' . $row->date_cal . '" title="Name :' . $row->description . '  Contact No : ' . $row->telephone_number . '">' . $row->title . ' ' . $row->type . '</div>';
                      }else{
                          $content .='<div class="add"></div>';
                      }
          
          
                      $lastDay = intval(substr($row->date_cal, 8, 2));
                      $index++;
                  }
          
                  if ($lastDay != -1 && $content != '') {
                      $cal_data[$lastDay] = $content;
                  }            
                  return $cal_data;
              } else {            
                  return Null;         
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2017-11-11
            • 2023-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-17
            • 2021-09-15
            • 2015-01-10
            相关资源
            最近更新 更多