簡體   English   中英

嵌套的foreach循環,帶有php和laravel

[英]nested foreach loop, with php and laravel

我的嵌套foreach循環有問題,我的控制器代碼檢索了數據庫中單獨表中兩列的值。

我想要的是將每個值與另一個表進行比較,反之亦然,...

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

我想要的輸出將是兩列的值是否比較,如果為true,則輸出“ match”,否則輸出“ mismatch”。

在此嘗試,但不起作用,僅對兩個表列中的最后一項進行比較。 我想我的嵌套循環不見了。

/// ///片段

調節器

$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。 您要檢查table1和table2是否匹配。 因此,如果不匹配,您將收到消息“不匹配”

假設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 :每個表都按行進行比較。 我的意思是將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;

好吧,我會這樣做的。

首先給變量名稱,以幫助您了解其中的內容

其次總是使用{}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;
        }
    }

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM