2012-01-17 30 views
3

私はabcdefg123hijklmのような文字列を持っています。私はまた、いくつかの文字列を含む配列を持っています。今度はabcdefg123hijklmを確認し、abcdefg123hijklm123が配列に含まれているかどうかを確認します。どうやってやるの?私はin_array()が効かないと思いますか?文字列とPHPの文字列を比較しますか?

ありがとうございます。

+0

を一つの単語preg_grep() – ArtisticPhoenix

答えて

12

その特定の文字列(それを$searchstringと呼ぶことができます)の部分文字列が配列に含まれているかどうかをチェックしますか?あなたは、配列を反復して、サブストリングのためにチェックする必要があります その場合:

foreach($array as $string) 
{ 
    if(strpos($searchstring, $string) !== false) 
    { 
    echo 'yes its in here'; 
    break; 
    } 
} 

参照:http://php.net/manual/en/function.strpos.php

あなたは文字列の特定の部分は、あなたが必要とする配列であるかどうかを確認したい場合substr()を使用して文字列のその部分を区切り、in_array()を使用して検索します。

http://php.net/manual/en/function.substr.php

+2

私は、コードブロック(中括弧)に 'echo'部分を入れ、中括弧の前に' break; 'を追加しますt - 少なくとも1つの文字列が一致するかどうかを知る必要がある場合は、パフォーマンスに役立ちます。 – Christian

+2

^Ackと実装されました。 – bardiir

6

別のオプションがそうのように、正規表現を使用し、内破することです:

if (preg_match('/'.implode('|', $array).'/', $searchstring, $matches)) 
    echo("Yes, the string '{$matches[0]}' was found in the search string."); 
else 
    echo("None of the strings in the array were found in the search string."); 

それは少し少ないコードだし、私はそれが大規模な検索文字列のためのより効率的であることを期待しますか検索文字列は、配列の各要素に対して1回ではなく、1回だけ解析する必要があるためです。

1つの欠点は、一致する文字列の配列インデックスを返さないということです。ループが必要な場合は、より良いオプションになる可能性があります。これはあなたの文字列が正規表現の特殊文字が含まれてするつもりはない知っている前提としています:

$match_index = array_search($matches[0], $array); 

編集続い上しかし、あなたはまた、コードでそれを見つけることができます。あなたの例のような純粋に英数字の文字列の場合は真ですが、より複雑な文字列を使用する場合は、最初にそれらをエスケープする必要があります。その場合、ループを使用する他のソリューションはおそらくより簡単になります。

3

逆にすることもできます。文字列は$ string、配列は$ arrayとします。

foreach ($array as $value) 
{ 
    // strpos can return 0 as a first matched position, 0 == false but !== false 
    if (strpos($string, $value) !== false) 
    { 
     echo 'Matched value is ' . $value; 
    } 
} 
+2

$ strpos()の開始時に$値が見つかった場合、strpos()は0を返し、false –