我的嵌套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.' ';
}
答案 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
,即使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;
}
}
}