PHP подсчитывает количество непустых входных данных в массиве в каждом цикле for

#php #sql #arrays #foreach

#php #sql #массивы #foreach

Вопрос:

У меня есть форма, которая обновляет несколько строк входных данных в моем sql. Каждая строка содержит 3 поля ввода в форме. Я пытаюсь подсчитать количество пустых данных в каждой строке в каждом цикле for и обновить это число в SQL путем вычисления в процентах. Например, в одной строке из 3 полей ввода заполнены только 2 поля ввода, поэтому процентное соотношение должно быть (2 / 3) * 100 = 67 ( округляется в большую сторону). Как мне это сделать? Ниже приведен мой код. Пожалуйста, проверьте, имеет ли это смысл для вас.

 <?php
        $execute = false;
        $pr = 0;
        $userid_array = $_POST['userid_array'];     
        $access_array = $_POST['access_array'];
        $ic_array = $_POST['ic_array'];
        $email_array = $_POST['email_array'];
        
        foreach($userid_array as $key => $userid)
        {
            $array_count = 0;
            $access = $access_array[$key];
            $ic = $ic_array[$key];
            $email = $email_array[$key];
            
            $array_count = count(array_filter($access,$ic,$email)); //Count number of non-empty array elements
            
            $pr_percent = round(($array_count/3)*100, 0); //number of non-empty array elements divided by total number of input field multiply by 100
            
            $tsql = "UPDATE MASTER SET [Access] = ?, [IC] = ?, [Email] = ?, [pr_percent] = ? WHERE user_id = ?"; 
            $params_tsql = array($access,$ic,$email,$pr_percent,$userid);
            $stmt = sqlsrv_query( $conn, $tsql, $params_tsql);
                

            if($stmt)
            {
                  $execute = true;
            } 
            else
            {
                  $execute = false;
                  die( print_r( sqlsrv_errors(), true));
            }
        }

        if($execute){
            echo "success";
        }else{
            echo "failed";
        }

?>
  

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

1. с какими проблемами вы сталкиваетесь? есть ли сообщения об ошибках?

2. @Kevin Он напечатал только «сбой» на основе моего эхо-сообщения.

3. Ваш код вообще не должен выполняться, array_filter($access,$ic,$email) должен завершаться с ошибкой типа, поскольку $access не является массивом. Это должно быть array_filter(array($access,$ic,$email))

Ответ №1:

@Nick Большое вам спасибо. Как я мог быть таким неосторожным.

Ниже мой ответ

 $array_count = count(array_filter(array($access,$ic,$email)));