首页 文章

嵌套的foreach循环,使用php和laravel

提问于
浏览
0

我遇到了嵌套的foreach循环问题,我的控制器代码在我的数据库的单独表中检索两列的值 .

我想要的是将每个值与另一个表进行比较,反之亦然,......

table1             table2
some column1       some column2 
 a                  b
 b                  b
 c                  c

我想要的输出是两列的值比较,如果是,则输出“匹配”,否则“不匹配” .

这里尝试,但它不起作用,只比较两个表列中的最后一项 . 我想我的嵌套循环缺少了 .

/// ///片段

controller

$temp_answers = array();
$answers = array();

$temp_answers = Tempanswer::where('subject_id', $subject_id)
                             ->where('student_id', $student_id)
                             ->lists('temp_answer');

$answers = Question::where('subject_slug', $subject->slug)
                             ->lists('letteranswer');

foreach ($temp_answers as $temp_answer) {

    foreach ($answers as $answer) {
        if($answer == $temp_answer){
            $flag = 'match';
        }else 
            $flag = 'mismatch';
    }
    echo $flag.' ';

 }

2 回答

  • 1

    CMIIW . 你想检查table1和table2是否匹配 . 所以,如果它不匹配,你会得到消息“不匹配”

    Assumption 1 :如果将table1中的每个数据与table2中的所有数据进行比较 .

    foreach ($temp_answers as $temp_answer) {
    
        foreach ($answers as $answer) {
            if($answer == $temp_answer){
                $flag = 'match';
            }else {
                $flag = 'mismatch';
                break;
            }
        }
    
        if($flag == 'mismatch'){
            break;
        }  
     }
    
    echo $flag;
    

    Assumption 2 :每行比较每一行 . 我的意思是将row1 table1与row1 table2进行比较,并将row2 table1与row2 table2进行比较 .

    $flag='';
    foreach ($temp_answers as $key1=>$temp_answer) {
        foreach ($answers as $key2=>$answer) {
            if($key1 == $key2){
                if($answer == $temp_answer){
                    $flag = $flag.'match ';
                }else {
                    $flag = $flag.'mismatch ';
                }
                break;
            }
        }
    }
    echo $flag;
    
  • 3

    好吧,我会这样做的 .

    首先给出变量名称,以帮助您了解其中的内容

    第二个总是在 if else 中使用 {} ,即使 ifelse 中只有一行,它也可以更容易地看到实际开始和结束的位置 .

    然后总是使用缩进,这样您就可以直观地看到代码块的开始和结束位置 . 请记住,您可能需要在编写代码后的几周内回复一段代码,因此您可以轻松阅读,因为您可能需要了解您的工作 .

    此外,当您输出有关匹配或不匹配的信息时,还需要包含您需要查看的数据,以便判断匹配是否正确 . 然后,如果它没有做你想要的,你可以很容易地看到什么是错的 .

    $temp_answers = array();
    $questions = array();
    
    $temp_answers = Tempanswer::where('subject_id', $subject_id)
                                 ->where('student_id', $student_id)
                                 ->lists('temp_answer');
    
    $questions = Question::where('subject_slug', $subject->slug)
                                 ->lists('letteranswer');
    
    foreach ($temp_answers as $temp_answer) {
    
        foreach ($questions as $question ) {
    
            if($question == $temp_answer){
                echo "Question = $question TempAnswer = $temp_answer > MATCH" . PHP_EOL;
            } else {
                echo "Question = $question TempAnswer = $temp_answer > MISMATCH" . PHP_EOL;
            }
        }
    
     }
    

相关问题