2016-06-07 6 views
0

Я извлекаю данные из базы данных, у которых есть даты, которые необходимо отправить в представление для создания диаграммы. Через несколько месяцев, возможно, не имеют сделок, которые мне нужны, чтобы они были autofilled с 0.Заполнение элементов массива нулевыми значениями Codeigniter

Модель

function get_chart_data() 
{ 
    $this->db->order_by('month','asc'); 
    $this->db->select('COUNT(*) as no_payments, SUM(amount) as total_payment_amount, YEAR(`date_paid`) AS year, MONTH(`date_paid`) AS month'); 
    $this->db->group_by(array("year", "month")); 
    $this->db->where('tbl_payments.payment_type', "PAYMENT"); 
    return $this->db->get('tbl_payments'); 
} 

Когда я print_r в мой контроллер данные

Array ([0] => stdClass Object ([no_payments] => 1 [total_payment_amount] => 450 [year] => 2016 [month] => 1) [1] => stdClass Object ([no_payments] => 5 [total_payment_amount] => 1162 [year] => 2016 [month] => 5) [2] => stdClass Object ([no_payments] => 2 [total_payment_amount] => 1700 [year] => 2016 [month] => 6)) 

Как я могу заполнить в отсутствующие месяцы и данные с нулевым значением, т.е. данные должны быть

Array ([0] => stdClass Object ([no_payments] => 1 [total_payment_amount] => 450 [year] => 2016 [month] => 1) [1] => stdClass Object ([no_payments] => 0 [total_payment_amount] => 0 [year] => 2016 [month] => 2) [2] => stdClass Object ([no_payments] => 0 [total_payment_amount] => 0 [year] => 2016 [month] => 3)) 

ответ

0

Вы можете добавить их вручную :

$months = array(); 
$query = $this->db->get('tbl_payments')->result(); 

foreach($query as $q) 
{ 
    $months[] = $q->month; 
} 

for($i = 1; $i <= 12; $i++) 
{ 
    if(!in_array($i, $months)) 
    { 
     $new_data = new stdClass(); 
     $new_data->no_payments = 0; 
     $new_data->total_payment_amount = 0; 
     $new_data->year = 2016; 
     $new_data->month = $i; 
     $query[] = $new_data; 
    } 
} 

Это значит, что вам понадобятся только месяцы заполнения текущего года. Если вы запрашиваете другие годы, вы можете добавить это к логике и включить ее в другой цикл.

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