嵌套的foreach循环,带有php和laravel
我的嵌套foreach循环有问题,我的控制器代码检索数据库中单独表中两列的值 我想要的是将每个值与另一个表进行比较,反之亦然嵌套的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 我想要的输出是,如果两列的值比较,如果为真,则输出“匹配”,否则输出“不匹配” 这里是尝试,但不起作用,只比较两个表列中的
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匹配匹配,否则不匹配?我已更新它。请检查这是否是您想要的。但是,为什么这只是我数组中的最后一项在两个表中进行比较?我会尝试将相同的数据放在两个表中,但根据您的代码不匹配情况,结果总是这样,但为什么这只是两个表中比较的数组中的最后一项?我会尝试将相同的数据放在这两个表中,但根据您的代码不匹配,结果总是这样吗