2010-04-19 3 views
1

J'ai un tableau et une variable, je veux vérifier si l'un des éléments du tableau se trouve dans la variable. Je suppose que j'utilise en quelque sorte strstr()?PHP Is Array Item In Variable

Exemple:

$bad = array('google.com', 'facebook.com', 'myspace.com'); 
$ref = $_SERVER['HTTP_REFERER']; 
if(ANY OF $bad IS IN $ref) { 
...   
} 
+2

Pouvez-vous donner un exemple? – Gumbo

+0

donne des exemples du tableau et de la variable – Galen

Répondre

4
foreach ($array as $value) { 
    if (strpos($variable, $value) !== false) { 
     // yep, this array element exists in your variable, do what you want here 
    } 
} 

(strpos() est un meilleur choix que strstr(), il est moins lourd ressources.)

0

Vous devez utiliser strpos si vous voulez seulement pour déterminer si la variable existe, mais vous n'avez pas besoin de retourner une partie de la chaîne.

0

Si vous avez besoin correspondant pour substring vos referers (par exemple, un match 'trois' dans '... trois ...'):

$array = array('one', 'two', 'three', ...); 
$val = '...three...'; 
foreach ($array as $entry) { 
    if (strpos($val, $entry) !== false) { 
     print 'Look ma, I found it!'; 
    } 
} 

Sinon (c.-à-vous cherchez correspond exactement à), vous pouvez juste;

$array = array('one', 'two', 'three', ...); 
$needle = 'three'; 
if (in_array($needle, $array)) { 
    print 'Look ma, I found it!'; 
} 

Edité selon @ pinkgothic de (correct) commentaire.

+0

Si vous permutez 'if (strpos ($ entrée, $ needle)! == false) {' pour 'if (strpos ($ needle, $ entry)! == false) {' dans votre première réponse (idéalement renommer '$ needle', par exemple' $ variable'), c'est une réponse parfaite à la question! La question est de savoir si [les éléments du tableau] sont dans la variable, et non l'inverse. :) – pinkgothic

+0

@pinkgothic Vous avez raison. Édité. – jensgram

1

Vous pouvez le faire comme ça, mais il est un peu un tricheur. str_ireplace() prendra un tableau de valeurs de recherche, et aussi vous dira combien de remplacements il a fait, donc s'il a fait des remplacements, vous savez que vous avez une correspondance.

<?php 

$bad = array('google.com', 'facebook.com', 'myspace.com'); 
$ref = $_SERVER['HTTP_REFERER']; 

str_ireplace($bad, '', $ref, $count); 

if ($count > 0) { 
    die ('bad'); 
} 
+0

Ooh, c'est un truc intéressant - j'aime sortir de la boîte en pensant. Bien que '$ count' échouerait à être précis si l'un des éléments du tableau était un sous-ensemble d'un autre, ou chevauché, non? Attention, cela n'est évidemment pertinent que si vous avez besoin d'un nombre exact de matchs, et je doute que ce soit le cas ici. [J'ai vraiment, vraiment besoin d'arrêter d'atteindre ma limite de vote quotidien dans les cinq premières minutes de l'OS. c_c] – pinkgothic

+0

@pinkgothic: Oui vous avez raison, vous obtiendriez un plus petit nombre, parce que les recherches ultérieures seraient sur la chaîne modifiée. –

+0

Encore, c'est vraiment génial! Je le mets en mémoire. Merci pour le partage. :) – pinkgothic