嵌套的foreach循环,带有php和laravel

嵌套的foreach循环,带有php和laravel,php,mysql,laravel-5.1,Php,Mysql,Laravel 5.1,我的嵌套foreach循环有问题,我的控制器代码检索数据库中单独表中两列的值 我想要的是将每个值与另一个表进行比较,反之亦然 table1 table2 some column1 some column2 a b b b c c 我想要的输出是,如果两列的值比较,如果为真,则输出“匹配”,否则输出“不匹配” 这里是尝试,但不起作用,只比较两个表列中的

我的嵌套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.' ';

 }
CMIIW。 您要检查表1和表2是否匹配。因此,如果不匹配,您将收到消息“不匹配”

假设1:如果将表1中的每个数据与表2中的所有数据进行比较

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:每一行对每个表进行比较。我的意思是,表1第1行与表2第1行比较,表1第2行与表2第2行比较

$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;
CMIIW。 您要检查表1和表2是否匹配。因此,如果不匹配,您将收到消息“不匹配”

假设1:如果将表1中的每个数据与表2中的所有数据进行比较

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:每一行对每个表进行比较。我的意思是,表1第1行与表2第1行比较,表1第2行与表2第2行比较

$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;

我会这样做的

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

其次,在
if else
中始终使用
{}
,即使
if
else
中只有一行,也可以更容易地看到事情的实际开始和结束位置

然后始终使用缩进,以便您可以直观地看到代码块的开始和结束位置。记住,在编写一段代码几周后,您可能需要返回到它,所以要使它易于阅读,因为您可能需要了解您所做的事情

此外,当您输出关于匹配或不匹配的信息时,还包括您需要查看的数据,以便判断匹配是否正确。然后,如果它没有完全做到你想要的,你可以很容易地看到哪里出了问题

$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;
        }
    }

 }

我会这样做的

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

其次,在
if else
中始终使用
{}
,即使
if
else
中只有一行,也可以更容易地看到事情的实际开始和结束位置

然后始终使用缩进,以便您可以直观地看到代码块的开始和结束位置。记住,在编写一段代码几周后,您可能需要返回到它,所以要使它易于阅读,因为您可能需要了解您所做的事情

此外,当您输出关于匹配或不匹配的信息时,还包括您需要查看的数据,以便判断匹配是否正确。然后,如果它没有完全做到你想要的,你可以很容易地看到哪里出了问题

$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;
        }
    }

 }


$flag
变量在每次
foreach
迭代时覆盖。使用数组存储flagshange
$flag='match'到一个简单的
回显“匹配”
不匹配也执行此操作
并松开
echo$标志如果你像上面那样用合理的缩进布局你的代码,那么错误会变得更容易看到。这是为了调试porpuses,实际上不是真正的分数,这是我的pivot表,我想根据嵌套的结果插入一些东西loops@RiggsFolly先生,我的地址对吗?尽管有这些变量?基本上你是在比较每一个给定的答案和每一个可能的答案。这真的没有意义,将问题4的给定答案与问题2的实际答案进行比较是没有意义的。
$flag
变量会在每次
foreach
迭代中覆盖。使用数组存储flagshange
$flag='match'到一个简单的
回显“匹配”
不匹配也执行此操作
并松开
echo$标志如果你像上面那样用合理的缩进布局你的代码,那么错误会变得更容易看到。这是为了调试porpuses,实际上不是真正的分数,这是我的pivot表,我想根据嵌套的结果插入一些东西loops@RiggsFolly先生,我的地址对吗?尽管有这些变量?基本上你是在比较每一个给定的答案和每一个可能的答案。这真的没有意义,将问题4的给定答案与问题2的实际答案进行比较是没有意义的。嗯。。。我想问问。若每个表的列中的所有数据都相同,则需要返回“匹配”消息。一旦数据不同,您希望返回的消息为“不匹配”。我说的对吗?不匹配不匹配正在比较其表Suming 3数据我的意思是另一个表上的主键/外键,该列上的值与另一个echo匹配匹配,否则不匹配?我已更新它。请检查这是否是你想要的。嗯。。。我想问问。若每个表的列中的所有数据都相同,则需要返回“匹配”消息。一旦数据不同,您希望返回的消息为“不匹配”。我说的对吗?不匹配不匹配正在比较其表Suming 3数据我的意思是另一个表上的主键/外键,该列上的值与另一个echo匹配匹配,否则不匹配?我已更新它。请检查这是否是您想要的。但是,为什么这只是我数组中的最后一项在两个表中进行比较?我会尝试将相同的数据放在两个表中,但根据您的代码不匹配情况,结果总是这样,但为什么这只是两个表中比较的数组中的最后一项?我会尝试将相同的数据放在这两个表中,但根据您的代码不匹配,结果总是这样吗