Reputation: 126
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> ['1'] => <span style='color:#a2a2a2'>Array (2)</span><br><span style='color:#eeeeee;'>|</span> (<br><span style='color:#eeeeee;'>|</span> <span style='color:#eeeeee;'>|</span> ['answer'] = <span style='color:#a2a2a2'>String(6)</span> <span style='color:green'>"asdasd"</span><br><span style='color:#eeeeee;'>|</span> <span style='color:#eeeeee;'>|</span> ['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> )<br><span style='color:#eeeeee;'>|</span> ['2'] => <span style='color:#a2a2a2'>Array (2)</span><br><span style='color:#eeeeee;'>|</span> (<br><span style='color:#eeeeee;'>|</span> <span style='color:#eeeeee;'>|</span> ['answer'] = <span style='color:#a2a2a2'>String(7)</span> <span style='color:green'>"asdasda"</span><br><span style='color:#eeeeee;'>|</span> <span style='color:#eeeeee;'>|</span> ['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> )<br><span style='color:#eeeeee;'>|</span> ['3'] => <span style='color:#a2a2a2'>Array (2)</span><br><span style='color:#eeeeee;'>|</span> (<br><span style='color:#eeeeee;'>|</span> <span style='color:#eeeeee;'>|</span> ['answer'] = <span style='color:#a2a2a2'>String(9)</span> <span style='color:green'>"sdasdasda"</span><br><span style='color:#eeeeee;'>|</span> <span style='color:#eeeeee;'>|</span> ['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> )<br><span style='color:#eeeeee;'>|</span> ['4'] => <span style='color:#a2a2a2'>Array (2)</span><br><span style='color:#eeeeee;'>|</span> (<br><span style='color:#eeeeee;'>|</span> <span style='color:#eeeeee;'>|</span> ['answer'] = <span style='color:#a2a2a2'>String(6)</span> <span style='color:green'>"qweqwe"</span><br><span style='color:#eeeeee;'>|</span> <span style='color:#eeeeee;'>|</span> ['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> )<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>
Any Ideas?
Upvotes: 0
Views: 51
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