It looks like there's an error here with your code:
echo "<div id='myModal' class='reveal-modal' data-reveal>";
You should perhaps give each modal a unique ID. Properly written Javascript applications fall over when ID's are used more than once as the CSS/JS specification says that you may only use an ID once.
My solution below introduces an iterator $i
which you can use to make each echoed element unique.
You will notice that the modal ID now has a number at the end of it, (myModal0, myModal1, etc.).
foreach ($badgesNotifications as $i => $notifications)
{
echo "<p>Congratulations! You've earned the <a href='#' data-reveal-id='myModa" . $i . "l'>" . $notifications['challenge_badge_title'] ." badge</a></p>";
echo "<div id='myModal" . $i . "' class='reveal-modal' data-reveal>
<h2>" . $notifications['challenge_title'] . "</h2>
<p class='lead'>Your couch. It is mine.</p>
<p>" . $notifications['challenge_description'] . " </p>
<a class='close-reveal-modal'>×</a>
</div>";
}
?>