【问题标题】:How to return multiple arrays? [duplicate]如何返回多个数组? [复制]
【发布时间】:2015-06-22 13:56:35
【问题描述】:

我的控制器中有以下方法。

function get_calendar_data($year, $month) {

        $query = $this->db->select('date_cal,title,type')->from('reservations')->like('date', "$year-$month", 'after')->get();
        $cal_data = array();
        $cal_data2 = array();
        $cal_data3 = array();
        $cal_data4 = array();

        foreach ($query->result() as $row) {
            if ($row->title == 'GK' && $row->type == 'AM') {
                $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'GK' && $row->type == 'PM') {
                $cal_data2[substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'RP' && $row->type == 'AM') {
                $cal_data3[substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'RP' && $row->type == 'PM') {
                $cal_data4[substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
            }
        }

        return $cal_data;
    }

我想返回 $cal_data、$cal_data2、$cal_data3 和 $cal_data4 中的所有值。 有什么办法吗?

【问题讨论】:

  • 将所有内容放在一个数组中并返回。
  • 您的问题已回答或您确实问错了。请接受最能回答您的问题的答案。
  • @AndreschSerj 这些方法中的任何一个都不适合我。
  • @IshaniPathinayake:那么你也许应该重写你的问题。试着非常清楚你想要的输出是什么。所有答案以不同的方式返回 $cal_data、$cal_data2、$cal_data3 和 $cal_data4 中的所有值。明确您的期望以及给定答案中的哪些内容。

标签: php arrays codeigniter


【解决方案1】:

来自PHP Manual

使用可选的 return 语句返回值。可以返回任何类型,包括数组和对象。这会导致该函数立即结束其执行并将控制权传递回调用它的行。请参阅return 了解更多信息。

不过,您可以返回一个包含所有数组的单个数组,

return [ $cal_data, $cal_data2, $cal_data3, $cal_data4 ];

【讨论】:

    【解决方案2】:

    做这样的事情:

    function get_calendar_data($year, $month) {
    
        $query = $this->db->select('date_cal,title,type')->from('reservations')->like('date', "$year-$month", 'after')->get();
        $cal_data = array(
            "GK_AM" => array(),
            "GK_PM" => array(),
            "RP_AM" => array(),
            "RP_PM" => array(),
        );
    
        foreach ($query->result() as $row) {
            if ($row->title == 'GK' && $row->type == 'AM') {
                $cal_data['GK_AM'][substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'GK' && $row->type == 'PM') {
                $cal_data['GK_PM'][substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'RP' && $row->type == 'AM') {
                $cal_data['RP_AM'][substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'RP' && $row->type == 'PM') {
                $cal_data['RP_PM'][substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
            }
        }
    
        return $cal_data;
    }
    

    ...或者,如果只有四个选项(GKAM、GKPM、RPAM、RPPM),那么这个更短...

    function get_calendar_data($year, $month) {
    
        $query = $this->db->select('date_cal,title,type')->from('reservations')->like('date', "$year-$month", 'after')->get();
        $cal_data = array(
            "GK_AM" => array(),
            "GK_PM" => array(),
            "RP_AM" => array(),
            "RP_PM" => array(),
        );
    
        foreach ($query->result() as $row) {
            $cal_data[$row->title. '_' . $row->type][substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
        }
    
        return $cal_data;
    }
    

    【讨论】:

    • 这对我不起作用:(
    • @IshaniPathinayake,您遇到了什么错误或行为?
    • 对于我之前的代码,我只得到一个数组数据。当我使用你的代码时,我没有得到任何数据。
    • $cal_data 显然正在加载和返回。您以什么方式测试以查看数组中是否有数据?请出示代码。
    • 参考这个链接。这是我的完整代码stackoverflow.com/questions/30977437/…
    【解决方案3】:

    如果同一个数组索引有多个值,可以定义一个动态数组。

    ps:注意 [] 动态分配。

    例子:

        foreach ($query->result() as $row) {
            if ($row->title == 'GK' && $row->type == 'AM') {
                $cal_data[substr($row->date_cal, 8, 2)][] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'GK' && $row->type == 'PM') {
                $cal_data2[substr($row->date_cal, 8, 2)][] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'RP' && $row->type == 'AM') {
                $cal_data3[substr($row->date_cal, 8, 2)][] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
            } else if ($row->title == 'RP' && $row->type == 'PM') {
                $cal_data4[substr($row->date_cal, 8, 2)][] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
            }
        }
    
        return $cal_data;
    }
    

    【讨论】:

      【解决方案4】:

      不要让这种数组将你的数组标准化为

      $result = array();
      
      foreach ($query->result() as $row) {
          if ($row->title == 'GK' && $row->type == 'AM') {
              $result['cal_data'][substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
          } else if ($row->title == 'GK' && $row->type == 'PM') {
              $result['cal_data2'][substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
          } else if ($row->title == 'RP' && $row->type == 'AM') {
              $result['cal_data3'][substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
          } else if ($row->title == 'RP' && $row->type == 'PM') {
              $result['cal_data4'][substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
          }
      }
      
      return $result;
      

      已编辑

      return array_merge($cal_data,$cal_data2,$cal_data3,$cal_data4);
      

      $result['cal_data'] = $cal_data;
      $result['cal_data2'] = $cal_data2;
      $result['cal_data3'] = $cal_data3;
      $result['cal_data4'] = $cal_data4;
      
      return $result;
      

      【讨论】:

      • 我试过这个。它对我不起作用
      • 您是否收到任何错误。或者试试我编辑的答案
      • 我认为这应该可行。但它没有给我预期的输出,因为我检查条件的方式是错误的。如果第一个条件为真,则不会检查其他条件。我希望检查所有条件。有什么想法吗?
      • 你可以使用switch case
      【解决方案5】:

      如果您检查所有条件,则将所有条件传入 if not elseif

      $data['cal_data'] = $cal_data;
      $data['cal_data2'] = $cal_data2;
      $data['cal_data3'] = $cal_data3;
      $data['cal_data4'] = $cal_data4;
      
      return $data;

      【讨论】:

        猜你喜欢
        • 2012-01-23
        • 2018-08-10
        • 2014-02-09
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 2016-08-19
        • 2010-09-30
        • 1970-01-01
        相关资源
        最近更新 更多