2015-07-20 8 views
4

У меня есть этот месяц массива $monthsNum = ['1','2','3','4','5','6','7','8','9','10','11','12'];, и я хочу, чтобы это сравнение в моем столбце базы данных month_uploaded со значениями от 1 до 12. Я хочу, чтобы подсчитать количество случаев происходит $ monthsNum значения массива в колонке month_uploaded и хранил его в массиве $ count_uploads .Zero счетчика помещается с нулевым значением в массиве $ count_uploads. Как мне это сделать? Ваша помощь очень ценится. Спасибо. Ниже приведены фрагменты моих кодов.Сравните данные в массиве и подсчитайте количество экземпляров, которые он встречает в базе данных с помощью codeigniter

enter image description here

function count_uploads_perMonth(){ 

    $monthsNum = ['1','2','3','4','5','6','7','8','9','10','11','12']; 

    $query = $this->db->select("*") 
        ->from($this->table_par) 
        ->where_in("month_uploaded",$monthsNum) 
        ->get(); 


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

     $count_uploads[] = count($row->month_uploaded); 

     } 

     var_dump($count_uploads); 

} 

Выход: Неправильный

array (size=5) 
0 => int 1 
1 => int 1 
2 => int 1 
3 => int 1 
4 => int 1 

Желаемая Выход:

array (size=12) 
0 => 0 or null 
1 => 0 or null 
2 => 0 or null 
3 => 0 or null 
4 => 0 or null 
5 => 1 
6 => 3 
7 => 0 or null 
8 => 0 or null 
9 => 0 or null 
10 => 0 or null 
11 => 0 or null 

Это ближе, просто, чтобы получить правильное значение счетчика для каждого массива ключевых

function count_uploads_perMonth(){ 

    $monthsNum = array('1','2','3','4','5','6','7','8','9','10','11','12'); 
    $this->db->select("month_uploaded as cnt"); 
    $this->db->where_in('month_uploaded',$monthsNum); 
    $this->db->group_by('month_uploaded'); 
    $query = $this->db->get($this->table_par); 

    $count_uploads = array_fill(1, 12, 0); 

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

     $count_uploads[$row->cnt] = $row->cnt; 

    } 
    var_dump($count_uploads); 

} 

Выход:

array (size=12) 
1 => int 0 
2 => int 0 
3 => int 0 
4 => int 0 
5 => int 0 
6 => string '6' (length=1) --- value should be 1 and length is 1 
7 => string '7' (length=1) --- value should be 4 and length is 4 
8 => int 0 
9 => int 0 
10 => int 0 
11 => int 0 
12 => int 0 

ответ

1

Я не уверен, но я думаю, что вам нужно здесь является array_count_values. Вы просто сделать массив результата из запроса с использованием ->get()->result_array();

$array = range(1,12); 
$result = array(7,7,7,6); 
$final = array_count_values($result); 
$final_array = array(); 
foreach($array as $value){ 
    $final_array[$value] = array_key_exists($value ,$final) ? $final[$value] : 0; 
} 
print_r($final_array); 

Отредактировано:

В соответствии с вашим результатом массива вы можете обновить массив в качестве

$arr = array(0 => array ('month_uploaded' => '7'), 1 => array ('month_uploaded' => '7'), 2 => array ('month_uploaded' => '7'), 3 => array ('month_uploaded' => '7'), 4 => array ('month_uploaded' => '6')); 
$result = array_count_values(array_column($arr,'month_uploaded')); 
$final_array = array(); 
foreach($array as $value){ 
    $final_array[$value] = array_key_exists($value ,$result) ? $result[$value] : 0; 
} 
print_r($final_array); 

Fiddle

+0

Как я могу заменить значение в $ result = array (7,7,7,6); сделать его более динамичным? – Eli

+0

Можете ли вы опубликовать значение '$ query', что вы получили в нем –

+0

Это показано выше – Eli

1

Append счетчик в массив с месяцев в качестве ключей.

$count_uploads[$row->month_uploaded][] = $row->month_uploaded; 

Теперь вы получите массив с месяцем в качестве ключа и добавленных значений в качестве значений.

echo '<pre>'; 
print_r($count_uploads); 
echo '</pre>'; 

Sample массив

array(
    3 => array(3, 3), 
    4 = array() 
) 
1
Use following functions and get your result. 

function count_uploads_perMonth(){ 

$monthsNum = array('1','2','3','4','5','6','7','8','9','10','11','12'); 
$this->db->select("count(month_uploaded) as cnt"); 
$this->db->where_in('month_uploaded',$monthsNum); 
$this->db->group_by('month_uploaded'); 
$query = $this->db->get('$this->table_par'); 


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

    $count_uploads[] = $row->cnt; 

    } 
    echo "<pre>"; 
    print_r($count_uploads); 

} 
1

SQL код:

SELECT month_uploaded-1 `month`, COUNT(*) `count` FROM table_name GROUP BY month_uploaded 

вы получите (5,1), (6,4). Затем

// Prepare array with zeros 
$count_uploads = array_fill(0, 12, 0); 

foreach($query->result() as $row) 
    $count_uploads[$row->month] = $row->count;