2015-08-29 122 views
0

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

我想是每个值对其他表反之亦然比较,...

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

'$ flag'变量覆盖每个'foreach'迭代。使用数组来存储标志 –

+0

将'$ flag ='match';'改成简单的'echo'匹配';'对'mismatch'也做这个并且放弃'echo $标志;'如果你用合理的布局代码如上所述的缩进,错误变得非常容易看到 – RiggsFolly

+0

它是用于调试porpuses,实际上不是真正的分数,我的透视表我想插入一些基于嵌套循环的结果 –

回答

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; 
+0

我也试过休息,并继续,T_T –

+0

嗯... 我想问。如果每个表的列中的所有数据都相同,则需要返回“匹配”消息。一旦数据不同,你想要返回的信息是'不匹配'。我对吗? –

+0

MISMATCH MISMATCH MISMATCH –

1

那么我会这样做。

先给变量的名称,可以帮助您知道什么是他们

Second总是在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; 
     } 
    } 

} 
+0

3但是为什么它只是我的阵列中最后一个项目在两个表中进行比较?我会尝试把这两个表上的相同的数据,但结果将永远喜欢你的代码基地 –

+0

MISMATCH MISMATCH MATCH –