Vlad Krasovsky
Vlad Krasovsky

Reputation: 126

php foreach bug. Any ideas why is it not working properly?

Why is it going on?


    foreach($questionsArr as $element){
        foreach($answersArr as $key => &$answer){
            if($key == $element["id"]){
                $answer["question"] = $element["question_text"];
            }
        }
    }
    $loggedInUser = user::getLoggedInUserObject();
    $userEmail = $loggedInUser->getEmail();
    $emailBody = '';
    $emailBody .= "".$tUser->getFname()." ".$tUser->getLName()." answers:

"; dump($answersArr); foreach($answersArr as $key => $answer){ $emailBody .= "

".$answer["question"]."

".$answer["answer"]."

"; } $emailBody .= ''; dump($emailBody); die();

<pre style='margin: 0px 0px 10px 0px; display: block; background: white; color: black; font-family: Verdana; border: 1px solid #cccccc; padding: 5px; font-size: 10px; line-height: 13px;'>$ => <span style='color:#a2a2a2'>Array (4)</span><br>(<br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['1'] => <span style='color:#a2a2a2'>Array (2)</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; (<br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; <span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['answer'] = <span style='color:#a2a2a2'>String(6)</span> <span style='color:green'>"asdasd"</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; <span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['question'] = <span style='color:#a2a2a2'>String(31)</span> <span style='color:green'>"WHAT WENT WRONG WITH THIS CALL?"</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; )<br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['2'] => <span style='color:#a2a2a2'>Array (2)</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; (<br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; <span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['answer'] = <span style='color:#a2a2a2'>String(7)</span> <span style='color:green'>"asdasda"</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; <span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['question'] = <span style='color:#a2a2a2'>String(58)</span> <span style='color:green'>"WHAT COULD YOU HAVE DONE DIFFERENTLY TO IMPROVE THIS CALL?"</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; )<br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['3'] => <span style='color:#a2a2a2'>Array (2)</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; (<br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; <span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['answer'] = <span style='color:#a2a2a2'>String(9)</span> <span style='color:green'>"sdasdasda"</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; <span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['question'] = <span style='color:#a2a2a2'>String(34)</span> <span style='color:green'>"WHAT DID YOU LEARN FROM THIS CALL?"</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; )<br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['4'] => <span style='color:#a2a2a2'>Array (2)</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; (<br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; <span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['answer'] = <span style='color:#a2a2a2'>String(6)</span> <span style='color:green'>"qweqwe"</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; <span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; ['question'] = <span style='color:#a2a2a2'>String(68)</span> <span style='color:green'>"WHAT ARE YOU GOING TO DO TO CORRECT THE AREAS OF FOCUS ON THIS CALL?"</span><br><span style='color:#eeeeee;'>|</span> &nbsp;&nbsp; )<br>)<br></pre><pre style='margin: 0px 0px 10px 0px; display: block; background: white; color: black; font-family: Verdana; border: 1px solid #cccccc; padding: 5px; font-size: 10px; line-height: 13px;'>$ = <span style='color:#a2a2a2'>String(325)</span> <span style='color:green'>"<html><body><p style="font-size:13px">ADRIANA CARDENAS answers:</p><p>WHAT WENT WRONG WITH THIS CALL?</p><p>asdasd</p><p>WHAT COULD YOU HAVE DONE DIFFERENTLY TO IMPROVE THIS CALL?</p><p>asdasda</p><p>WHAT DID YOU LEARN FROM THIS CALL?</p><p>sdasdasda</p><p>WHAT DID YOU LEARN FROM THIS CALL?</p><p>sdasdasda</p></body></html>"</span><br></pre>

var_dump for the code

Any Ideas?

Upvotes: 0

Views: 51

Answers (1)

Mark Baker
Mark Baker

Reputation: 212412

Because you're using by reference without reading the relevant PHP docs about what side effects that might have..... this is not a bug, it's documented behaviour

See the warning note

Warning Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().

Pay heed to what it says, and unset

foreach($questionsArr as $element){
    foreach($answersArr as $key => &$answer){
        if($key == $element["id"]){
            $answer["question"] = $element["question_text"];
        }
    }
    unset($answer);
}

or don't use by reference in the first place

foreach($questionsArr as $element){
    foreach($answersArr as $key => $answer){
        if($key == $element["id"]){
            $answersArr['key']["question"] = $element["question_text"];
        }
    }
}

Upvotes: 1

Related Questions