私はabcdefg123hijklm
のような文字列を持っています。私はまた、いくつかの文字列を含む配列を持っています。今度はabcdefg123hijklm
を確認し、abcdefg123hijklm
の123
が配列に含まれているかどうかを確認します。どうやってやるの?私はin_array()
が効かないと思いますか?文字列とPHPの文字列を比較しますか?
ありがとうございます。
私はabcdefg123hijklm
のような文字列を持っています。私はまた、いくつかの文字列を含む配列を持っています。今度はabcdefg123hijklm
を確認し、abcdefg123hijklm
の123
が配列に含まれているかどうかを確認します。どうやってやるの?私はin_array()
が効かないと思いますか?文字列とPHPの文字列を比較しますか?
ありがとうございます。
その特定の文字列(それを$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()
を使用して検索します。
別のオプションがそうのように、正規表現を使用し、内破することです:
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);
編集続い上しかし、あなたはまた、コードでそれを見つけることができます。あなたの例のような純粋に英数字の文字列の場合は真ですが、より複雑な文字列を使用する場合は、最初にそれらをエスケープする必要があります。その場合、ループを使用する他のソリューションはおそらくより簡単になります。
逆にすることもできます。文字列は$ 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;
}
}
$ strpos()の開始時に$値が見つかった場合、strpos()は0を返し、false –
(上から123 $マッチすることができ、[1])
$re = "/(\d+)/";
$str = "abcdefg123hijklm";
preg_match($re, $str, $matches);
とあなたの番号を取得するために使用この:
preg_grep('/123/', $array);
を一つの単語preg_grep() – ArtisticPhoenix