如何使用codeigniter提交表单后计算数组结果

时间:2015-12-09 11:06:03

标签: php codeigniter

我想用Codeigniter创建调平系统。 我从表中检索所有条件,然后用户填写quistionare,最后系统进行decission,level 1,level 2或level 3。

这是我的控制器:

if ($this->input->post('submit_asesmen')) {
        $hitung_asesmen=count($_POST['id_komponen']);
        $level='';
        for ($i=0; $i < $hitung_asesmen; $i++) { 

            $id_asesmen=$_POST['id_komponen'][$i];
            $yes=$_POST['yesorno'][$i];
            $bukti=$_POST['cek'][$i];
            $lihat_level=$this->m_asesmen->select_level($id_asesmen);

            $data_asesmen = array(                  
                'id_komponen_asesmen' => $id_asesmen, 
                'yes_or_no' => $yes, 
                'level' => $lihat_level, 
                );

            $hitung_level_1=$this->m_asesmen->jml_level_1();
            $macam_level_1=$this->m_asesmen->macam_level_1();

            if ($lihat_level=='1' && $yes=='1') {
                echo "Level 1 <br>";
            }
            else{
                echo "Level 0 <br>";
            }
        }
    }

我的临时输出就像

Level 1
Level 0
Level 0
Level 0
Level 1
Level 1
Level 1
Level 1
Level 0
Level 0
Level 0

如何创建输出:?

Level 0 : 6 values
Level 1 : 5 values

3 个答案:

答案 0 :(得分:1)

这可以通过PHP的函数array_count_values()来实现。只需将数组传递给此函数,它将返回一个包含值/计数对的关联数组。

示例:

$tempOutput = array('Level 1', 'Level 0', 'Level 0', 'Level 0', 'Level 1', 'Level 1', 'Level 1', 'Level 1', 'Level 0', 'Level 0', 'Level 0');

// will return array('Level 1' => 5, 'Level 0' => 6);
$newOutput = array_count_values($tempOutput);

由于您的代码中没有将值保存在数组中,因此手动计算值将是更好,更简单的解决方案:

// array holding the counts for each level
$levels = [];
if ($this->input->post('submit_asesmen')) {
    $hitung_asesmen=count($_POST['id_komponen']);
    $level='';
    for ($i=0; $i < $hitung_asesmen; $i++) { 

        $id_asesmen=$_POST['id_komponen'][$i];
        $yes=$_POST['yesorno'][$i];
        $bukti=$_POST['cek'][$i];
        $lihat_level=$this->m_asesmen->select_level($id_asesmen);

        $data_asesmen = array(                  
            'id_komponen_asesmen' => $id_asesmen, 
            'yes_or_no' => $yes, 
            'level' => $lihat_level, 
            );

        $hitung_level_1=$this->m_asesmen->jml_level_1();
        $macam_level_1=$this->m_asesmen->macam_level_1();

        if ($lihat_level=='1' && $yes=='1') {
            echo "Level 1 <br>";
        }
        else{
            echo "Level 0 <br>";
        }

        // check if a count exists in $levels
        if(!isset($levels[$lihat_level])) {
            // count does not exist, initialize with 1
            $levels[$lihat_level] = 1;
        } else {
            // count already exists, increase by 1
            $levels[$lihat_level] ++;
        }
    }
}

// And this will create the desired output like you wrote it in your question
foreach($levels as $level => $count) {
    echo 'Level ' . $level . ' : ' . $count . ' values<br />';
}

答案 1 :(得分:0)

很好的例子,但它并不能很好地解释他真正想要的东西 试试这个

示例

$arr = array("Level 1","Level 2","Level 3", "Level 4");
$newData = array_count_values($arr);
foreach($arr as $data){
echo $data.":  ".$newData[$data]." value<br>";
}

<强>结果

Level 1: 1 value
Level 2: 1 value
Level 3: 1 value
Level 4: 1 value

答案 2 :(得分:0)

if ($this->input->post('submit_asesmen')) {
            $hitung_asesmen=count($_POST['id_komponen']);
            $level='';
            // Define Level Array
            $levels_ary=array();
            for ($i=0; $i < $hitung_asesmen; $i++) { 

                $id_asesmen=$_POST['id_komponen'][$i];
                $yes=$_POST['yesorno'][$i];
                $bukti=$_POST['cek'][$i];
                $lihat_level=$this->m_asesmen->select_level($id_asesmen);

                $data_asesmen = array(                  
                    'id_komponen_asesmen' => $id_asesmen, 
                    'yes_or_no' => $yes, 
                    'level' => $lihat_level, 
                    );

                $hitung_level_1=$this->m_asesmen->jml_level_1();
                $macam_level_1=$this->m_asesmen->macam_level_1();


                if ($lihat_level=='1' && $yes=='1') {
                    $levels_ary[]="Level 1";
                }
                else{
                    $levels_ary[]="Level 0";
                }
            }

            print_r(array_count_values($levels_ary));
        }