как посчитать весь массив данных в контроллере

#codeigniter #postgresql

#codeigniter #postgresql

Вопрос:

Я хочу подсчитать массив данных, полученных с помощью postgresql, используя codeigniter.Я использовал цикл foreach и использовал count ($ row[‘zero’]) для подсчета, но это приводит только к 1. пожалуйста, направьте меня.

Вот мой контроллер

 public function indicators($pcode = '', $dcode = '') {
    $this->data['p_code'] = $pcode;
    $this->data['d_code'] = $dcode;
    $this->data['pcode'] = $this->employment_model->get_project();

        $this->data['attend_household'] = $this->employment_model->household_absent_all($dcode);
        var_dump($this->data['attend_household']);
        die();
        foreach($this->data['attend_household'] as $row){
            if($row['zero']>0){
                      $this->data['zerroo']=count($row['zero']);              
            }
        }
        if (count($this->data['attend_household']) > 0) {
            $this->data['attend_household'] = $this->data['attend_household'][0];
        }

    // var_dump($this->data);
    $this->load->view("employment_info", $this->data);
}
  

Вот моя модель

 function household_absent_all($dcode) {
    $dcode_query = "";
    if ($dcode != '') {
        if ($dcode == 'all') {
            $dcode_query = "";
        } else {
            $dcode_query = "where t.dcode='$dcode'";
        }
    }
    $sql = "select (100-(sum(days_worked)/sum(days_offered))*100) as zero,regno,sum(days_offered) as days_offered,sum(days_worked) as days_worked
        from(
            select*
            from assets.tblprojects a
            join(
            select pcode as project,hh_jobcard_no
            from employment.work_group_member
            )wg on a.pcode=wg.project
            join(
            select regno,at.days_offered,at.days_worked                                  
            from employment.registration_hh_member

             join(
            select pcode as a_pcode,hh_jobcard_no as jobcard,mem_id,
            sum((shift_1*0.5) (shift_2*0.5)) as days_worked,count(adate) as days_offered
            from employment.attendence
            group by a_pcode,jobcard,mem_id
            )at on regno=at.jobcard and s_no=at.mem_id
            )rhm on wg.hh_jobcard_no=rhm.regno                
            )t
            group by regno
            $dcode_query
            ";
    $result = $this->db->query($sql)->result_array();
    return $result;
}
  

Комментарии:

1. вы хотите подсчитать все записи из таблицы

2. нет, я хочу посчитать только ноль в соответствии с условиями

3. это означает, что вы хотите посчитать только эту строку $[‘zero’]

Ответ №1:

попробуйте вот так

 $i=0;
 foreach($this->data['attend_household'] as $row){
            if($row['zero']>0){
                     $i  ;           
            }
        }
 $this->data['zerroo']=$i;
  

Ответ №2:

как насчет использования num_rows() в качестве счетчика.

 if($num = $result->num_rows() >=1){
    $result = array('result_set'=>$result->result_array(),'result_count'=>$num);
}else{
    $result = array('result_set'=>FALSE,'result_count'=>FALSE);
}
return $result;
  

затем на вашем контроллере вы можете использовать его как $variable['result_count'] для подсчета, так и $variable['result_set'] для результатов данных.

Комментарии:

1. У меня есть массив, подобный этому array 0 => array ‘zero’ => string ‘11.32075471698113207500’ (длина= 23) ‘regno’ => string ‘KEP-63013-25’ (длина = 12) ‘days_offered’ => string ’53’ (длина= 2) ‘days_worked’ => string ‘47.0’ (длина= 4)

2. 1 => массив ‘ноль’ => строка ‘0.79365079365079365100’ (длина =22) ‘regno’ => строка ‘KEP-64004-118’ (длина =13) ‘days_offered’ => строка ’63’ (длина=2) ‘days_worked’ => строка ‘62.5’ (длина= 4) … и я хочу, чтобы, если значение нуля больше 0, подсчет результата