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

时间:2015-08-29 15:18:57

标签: php mysql laravel-5.1

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

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

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

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

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

///片断///

控制器

$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 个答案:

答案 0 :(得分:3)

CMIIW。 你想检查table1和table2是否匹配。因此,如果不匹配,您将收到消息"不匹配"

假设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;

假设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;

答案 1 :(得分:1)

好吧,我会这样做的。

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

第二个始终在{}使用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;
        }
    }

 }