Trouver si une valeur de tableau apparaît dans une chaîne. (Type d'une in_array inverse?)
Question
Sur un site, je travaille sur il y a une subheadline qui devrait être montré que si les informations ne sont pas déjà indiqué dans le titre principal. Le titre principal est une chaîne arbitraire, alors que le subheadline est créé programatically. Le subheadline est généré à partir du contenu d'un tableau multidimensionnel (dont le contenu sont également utilisés pour d'autres parties de la page.)
J'ai utilisé l'exemple de PHP foreach
pour percer à travers le tableau (seulement à moitié comprendre comment il fonctionnait), puis a essayé strpos
pour voir si les valeurs du tableau étaient dans la chaîne de titre.
Malheureusement, il ne fonctionne pas. Il y a une forte chance que je fait une erreur stupide dans la façon dont je pensais qu'il est censé fonctionner. Ou que la variable qui indique le site pour cacher la subhead ( « Hider ») est remis à zéro en permanence à « non » à la suite des autres valeurs du tableau.
foreach ($arr_info as $i1 => $n1) {
foreach ($n1 as $i2 => $n2) {
foreach ($n2 as $i3 => $n3) {
$pos = strpos($headline, $n3);
if ($pos === false) {
$hider="no";
} else {
$hider="yes";
}
}
}
Toutes les idées? Grandement apprécie l'aide.
La solution
Ajoutez à ceci:
$hider="yes"; break;
it helps
Autres conseils
Je pense qu'une approche plus propre serait de construire une expression régulière sur des valeurs et de voir si elle correspond à votre chaîne:
$values = array();
array_walk_recursive($arr_info, function($k){$GLOBALS['values'][] = preg_quote($k);});
$hider = preg_match('/(' . implode($values, '|') . ')/', $headline) ? 'yes' : 'no';