Dize bir dizi (harf duyarsız) herhangi öğeleri içerir

6 Cevap php

Bir $string öğeleri herhangi bir dizi ifade içeriyorsa, nasıl kontrol edebilirim?

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(contains($string,$array))
{
// do something to say it contains
}

Herhangi bir fikir?

6 Cevap

Eğer isteseydi ne? i bu kod derleme umut :)

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
  //do sth
}

Ben ne istediğinizi işleyeceği yerleşik bir işlevi olduğunu sanmıyorum. Kolayca ancak contains() fonksiyon yazabiliriz:

function contains($str, array $arr)
{
    foreach($arr as $a) {
        if (stripos($str,$a) !== false) return true;
    }
    return false;
}

Kabul cevap kullanılması:

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
  //do sth
}

If ifadesi değişti olabilir bu sadece bir yan not:

if(0 < count(array_intersect(explode(' ', strtolower($string)), $array)))

her eleman için strtolower uygulamak için array_map kullanmak gerçekten gerekli değil çünkü. yerine ilk dize uygulayın.

Böyle bir şey çalışmak:

$string = 'My nAmE is Tom.';
$array = array("name", "tom");
foreach ($array as $token) {
    if (stristr($string, $token) !== FALSE) {
        print "String contains: $token\n";
    }
}

Bu işi yapacak?

$words = explode(" ", $string);
$wordsInArray = array();
foreach($words as $word) {
    if(in_array($word, $array)) {
        $wordsInArray[] = $word;
    }
}

Çok basit, linki lütfen in_array

$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Es Irix";
}