Как посчитать результат массива после отправки формы с использованием codeigniter

1

Я хочу создать систему выравнивания с помощью Codeigniter. Я извлекаю все критерии из таблицы, затем Пользователь заполняет quistionare и, наконец, система делает деление, уровень 1, уровень 2 или уровень 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
Теги:
codeigniter

3 ответа

1
Лучший ответ

Этого можно добиться с помощью функции PHP array_count_values(). Просто передайте свой массив этой функции, и он вернет ассоциативный массив, содержащий пары value/count.

Пример:

$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 />';
}
  • 0
    Не могли бы вы написать пример, основанный на моем случае?
  • 0
    Пример добавлен. :)
Показать ещё 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
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));
        }
  • 0
    привет сатиш. Попробуйте опубликовать объяснение своего кода, так как это увеличивает шансы будущей аудитории прочно понять концепции.
  • 0
    Я не вижу вывод, я пытаюсь изменить ввод, но результат тоже не может измениться

Ещё вопросы

Сообщество Overcoder
Наверх
Меню