2015-06-23 3 views
4

У меня есть эта функция в контроллере.Как вернуть несколько массивов из функции в codeigniter?

function get_data($year, $month) { 

     $query = $this->db->select('date,name,type')->from('books')->like('date', "$year-$month", 'after')->get(); 
     $data = array(); 
     $data2 = array(); 
     $data3 = array(); 


     foreach ($query->result() as $row) { 
      if ($row->name == 'AA' && $row->type == 'AM') { 
       $data[substr($row->date, 8, 2)] = '<div class="aa_am">' . $row->name . ' ' . $row->type . '</div>'; 
      } else if ($row->name == 'AA' && $row->type == 'PM') { 
       $data2[substr($row->date, 8, 2)] = '<div class="aa_pm">' . $row->name . ' ' . $row->type . '</div>'; 
      } else if ($row->name == 'BB' && $row->type == 'AM') { 
       $data3[substr($row->date, 8, 2)] = '<div class="bb_am">' . $row->name . ' ' . $row->type . '</div>'; 
      } 
     } 
     return $data; 
    } 

Я хочу получить все данные, которые находятся в $ data, $ data1 и $ data2 в одно и то же время. Можно ли это сделать? Если у кого-то есть идея, это поможет мне.

+0

'return array ($ data, $ data2, $ data3);', другой вариант - 'return array_merge ($ data, $ data1, $ data2)'. array merge имеют шансы потерять данные в случае, если любой ключ такой же. – jagad89

+0

Это какая-то домашняя работа или что-то еще? потому что тот же [вопрос] (http://stackoverflow.com/questions/30981819/how-to-return-multiple-arrays) был опубликован с тем же кодом – Viral

ответ

1

Вы можете сделать это следующим образом,

function get_data($year, $month) { 

    $query = $this->db->select('date,name,type')->from('books')->like('date', "$year-$month", 'after')->get(); 
    $data = array(); 
    $data1 = array(); 
    $data2 = array(); 


    foreach ($query->result() as $row) { 
     if ($row->name == 'AA' && $row->type == 'AM') { 
      $data[substr($row->date, 8, 2)] = '<div class="aa_am">' . $row->name . ' ' . $row->type . '</div>'; 
     } else if ($row->name == 'AA' && $row->type == 'PM') { 
      $data1[substr($row->date, 8, 2)] = '<div class="aa_pm">' . $row->name . ' ' . $row->type . '</div>'; 
     } else if ($row->name == 'BB' && $row->type == 'AM') { 
      $data2[substr($row->date, 8, 2)] = '<div class="bb_am">' . $row->name . ' ' . $row->type . '</div>'; 
     } 
    } 
$return['data']=$data; 
$return['data1']=$data1; 
$return['data2']=$data2; 
    return $data; 
} 

вы можете получить доступ в поле зрения как varible,

$data['index'], $data1['index'], $data2['index'] 

, если вы хотите, чтобы объединить их тогда,

array_merge($data,$data1,$data2); 
+0

Я думаю, что это должно сработать. но это не дает мне ожидаемый результат, потому что способ проверки я ошибаюсь. Здесь, если 1-е условие истинно, другие условия не будут проверяться. Я хочу, чтобы все условия были проверены. любая идея сделать это? – Stell

+0

попробуйте отладить его и проверить, как поступают данные. используя 'print_r ($ query-> result())', а затем 'print_r ($ row-> name)' –

2

С ваш код, я не знаю, какого результата вы ожидаете, объединив все данные, которые находятся в $ data, $ data1 и $ data2.

но вы можете попробовать array_merge(array1,array2,array3...) функция, если вы хотите, чтобы все данные, где ключ начинался с 0 и увеличивался на 1 для каждого значения.

Или же вы можете создать другой массив со всеми значениями данных, например,

return array("data" => $data, "data1" => $data1, "data2" => $data2)

этим способом можно достичь того, чего вы хотите.

Смежные вопросы