Список таблиц, который должен быть динамическим, требует пропуска с использованием нескольких массивов - PullRequest
0 голосов
/ 25 января 2019

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

Помощь, безусловно, ценится

Ссылка Fiddle также упомянула об этом: - http://phpfiddle.org/main/code/1sr6-kn5u

<?php
$users = array (
    0  => array("user_id" => "217", "user_name" => "S", "id" => "33"),
    1 => array("user_id" => "216", "user_name" => "A", "id" => "32"),
    2  => array("user_id" => "215", "user_name" => "B", "id" => "31"),
);
$questions = array (
    0  => array("text" => "Q1", "type" => "text", "qid" => "1"),
    1  => array("text" => "Q2", "type" => "text", "qid" => "2"),
    2  => array("text" => "Q3", "type" => "text", "qid" => "3"),
);
$answers = array (
    0  => array("SRI" => "31", "qid" => "1", "answer" => "A1"),
    1  => array("SRI" => "31", "qid" => "2", "answer" => "A2"),
    2  => array("SRI" => "31", "qid" => "3", "answer" => "A3"),
    3  => array("SRI" => "32", "qid" => "3", "answer" => "A3"),
    4  => array("SRI" => "32", "qid" => "2", "answer" => "A2"),
    5  => array("SRI" => "33", "qid" => "1", "answer" => "A1"),
    6  => array("SRI" => "33", "qid" => "3", "answer" => "A3")
);
//echo "<pre>";
//print_r($users);
//print_r($questions);
//print_r($answers);
?>
<table border = 1>
    <tr>
        <th>
            User
        </th>
        <?php 
foreach($questions as $key => $Qval){
    echo "<th>".$Qval['text']."</th>";         
}
        ?>
    </tr>
    <?php
foreach($users as $key => $Uval){
    echo "<tr>";  
    echo "<td>".$Uval['user_name']."</d>";
    foreach($questions as $key => $Qval){
        foreach($answers as $key => $Aval){
            if (($Qval['qid'] == $Aval['qid']) && ($Uval['id'] == $Aval['SRI'])){
                echo "<th>".$Aval['answer']."</th>";
            }
        }
    }
    echo "</tr>";  
}
    ?>
</table>

Желаемый результат

enter image description here

1 Ответ

0 голосов
/ 26 января 2019

Вы должны разделить вашу проблему в два этапа:

  1. определить, отвечает ли пользователь на текущий вопрос или нет
  2. затем отобразите результат

    foreach($users as $key => $Uval){
        echo "<tr>";  
        echo "<td>".$Uval['user_name']."</d>";
        foreach($questions as $key => $Qval){
            $userAnswer = null ; // no user answer per default
            foreach($answers as $key => $Aval){ // loop to find a user answer 
                if (($Qval['qid'] == $Aval['qid']) && ($Uval['id'] == $Aval['SRI'])){
                    $userAnswer = $Aval['answer']; // save the user answer
                    break ; // we found the user answer, no need to continue to loop over the remaining answers
                }
            }
            // display the user answer, use a placeholder if none is found
            echo '<td>' . (is_null($userAnswer) ? 'SKIP' : $userAnswer) . '</td>' ;
        }
        echo "</tr>";  
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...