Ciao bonann23 e benvenuto,
da quello che vedo in realtà sono entrambe errate le ricerche. La seconda ti funziona semplicemente perchè sovrascrivi $cerca come variabile con "oggi", sovrascrivendo a malo modo il dato effettivo del ciclo foreach.
Detto questo, sbagli l'approccio.
Direttamente dall'array estratto dal database prova ad utilizzare questa funzione:
[PHP]
<?php
function my_search($haystack) {
$needle = 'value to search for';
return(strpos($haystack, $needle)); // or stripos() if you want case-insensitive searching.
}

$matches = array_filter($your_array, 'my_search');
?>
[/PHP]
Fammi sapere.