42

$string配列で表現されたアイテムのいずれかがに含まれているかどうかを確認するにはどうすればよいですか?

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

何か案は?

4

14 に答える 14

101

あなたが望むものを処理する組み込み関数はないと思います。contains()ただし、関数は簡単に作成できます。

function contains($str, array $arr)
{
    foreach($arr as $a) {
        if (stripos($str,$a) !== false) return true;
    }
    return false;
}
于 2010-01-23T20:22:30.363 に答える
25

それはあなたが望んでいたことですか?コードがコンパイルされていることを願っています:)

$string = 'My nAmE is Tom.';
$array = array("name","tom");
if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array)))
{
  //do sth
}
于 2010-01-23T20:21:11.680 に答える
15

受け入れられた答えを使用する:

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

ifステートメントを次のように変更できることに注意してください。

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

strtolower各要素に適用するためにarray_mapを使用する必要は実際にはないためです。代わりに、それを最初の文字列に適用します。

于 2013-09-05T08:23:44.330 に答える
9

contains関数のもう1つの回避策

function contains($string, $array, $caseSensitive = true)
{
    $stripedString = $caseSensitive ? str_replace($array, '', $string) : str_ireplace($array, '', $string);
    return strlen($stripedString) !== strlen($string);
}

PS。私は機能なしで使っています。

if (strlen(str_replace($array, '', $string)) !== strlen($string)) {
    // do it
}
于 2015-11-25T09:45:49.337 に答える
7

このようなものが機能します:

$string = 'My nAmE is Tom.';
$array = array("name", "tom");
foreach ($array as $token) {
    if (stristr($string, $token) !== FALSE) {
        print "String contains: $token\n";
    }
}
于 2010-01-23T20:22:31.337 に答える
5

配列の要素が特定の文字列に存在するかどうかを確認できます。

$string = 'My nAmE is Tom.';
$array = array("name","tom");

if(str_replace($array, '', strtolower($string)) !== strtolower($string)) {
   // If String contains an element from array      
   // Do Something
}
于 2021-04-07T12:00:39.563 に答える
2
<?php

$input = preg_quote('blu', '~'); // don't forget to quote input string!
$data = array('orange', 'blue', 'green', 'red', 'pink', 'brown', 'black');

$result = preg_grep('~' . $input . '~', $data);
print_r($result);

?>
于 2016-06-22T06:08:41.767 に答える
1

これは仕事をしますか?

$words = explode(" ", $string);
$wordsInArray = array();
foreach($words as $word) {
    if(in_array($word, $array)) {
        $wordsInArray[] = $word;
    }
}
于 2010-01-23T20:20:37.433 に答える
0
function contains($str, $arr)
{
  $ptn = '';
  foreach ($arr as $s) {
    if ($ptn != '') $ptn .= '|';
    $ptn .= preg_quote($s, '/');
  }
  return preg_match("/$ptn/i", $str);
}

echo contains('My nAmE is Tom', array('name', 'tom'));
于 2010-01-23T20:27:05.783 に答える
0

array_intersect()関数を使用する別の方法は、以下のコードを試してください。

function checkString(array $arr, $str) {

  $str = preg_replace( array('/[^ \w]+/', '/\s+/'), ' ', strtolower($str) ); // Remove Special Characters and extra spaces -or- convert to LowerCase

  $matchedString = array_intersect( explode(' ', $str), $arr);

  if ( count($matchedString) > 0 ) {
    return true;
  }
  return false;
}
于 2017-08-17T06:42:12.687 に答える
0

許可されていない単語のリストに対してユーザー入力をチェックする必要があったため、いくつかのテストを行いました。

すべてを小文字に変換してから(リストが小文字であるため)、配列の交差を使用するのがはるかに高速であることがわかりました。

    **First Option I Tested**
    $tempString= explode(' ',strtolower($string));
    $foundWords = array_intersect($tempString,$profanities);
    Time taken: 0.00065207481384277 

    **The second option I tested**
    $tempWords = explode(' ',$words);
    foreach ($tempWords as $word)
    {
        foreach ($profanities as $profanity)
        {
            if (stripos($word,$profanity) !== false) return true;
        }
    }
    Time Taken: 0.024131059646606
于 2021-07-14T15:40:37.707 に答える
0

より簡単な方法があります

   $string = 'My nAmE is Tom.';
   $convert=explode(" ",$string,5);
   if(in_array("My", $convert)){

      echo "Ja";
   }else{

      echo "Nein";
   }
于 2022-01-04T19:37:08.423 に答える
0

一致するカウントを取得する必要があるため、preg_match_allを使用しました

preg_match_all("/" . implode(' | ', $array) . "/i", " ".str_replace([':', '-'], ' ',$string)." ", $matches);
count($matches[0]);
于 2022-02-28T12:22:25.980 に答える
-4

もっと簡単に、リンクin_arrayを参照してください

$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Es Irix";
}
于 2012-08-28T15:35:41.407 に答える