PHPにはin_array
、指定された値が配列に存在するかどうかをチェックする関数があります。私はそれの逆をしたいと思います。私は文字列のセットを持っています:
$words = array("hello", "world");
そして、与えられた文字列にこれらの単語が含まれているかどうかを、パラメータを指定するかどうかで確認したいと思いall
ますany
。
$string = "Hello, World!";
$second = "Hello and Welcome!";
in_string($words, $string, "all");
in_string($words, $string, "any");
私が今持っているのは、を使用することstripos()
です。使いたくないregex
。
現在のコード:
<?php
/**
* Checks if the given words is found in a string or not.
*
* @param Array $words The array of words to be given.
* @param String $string The string to be checked on.
* @param String $option all - should have all the words in the array. any - should have any of the words in the array
* @return boolean True, if found, False if not found, depending on the $option
*/
function in_string ($words, $string, $option)
{
if ($option == "all")
foreach ($words as $value)
$isFound = $isFound && (stripos($string, $value) || false);
else
foreach ($words as $value)
$isFound = $isFound || (stripos($string, $value) || false);
return $isFound;
}
?>
私の質問は、これを改善できるかということです。何かご意見は?
更新#1:現在のコードが更新されました:
/**
* Checks if the given words is found in a string or not.
*
* @param Array $words The array of words to be given.
* @param String $string The string to be checked on.
* @param String $option all - should have all the words in the array. any - should have any of the words in the array
* @return boolean True, if found, False if not found, depending on the $option
*/
function in_string ($words, $string, $option)
{
if ($option == "all")
{
$isFound = true;
foreach ($words as $value)
$isFound = $isFound && (stripos($string, $value) !== false);
return $isFound;
}
else
{
$isFound = true;
foreach ($words as $value)
if (stripos($string, $value) !== false) return true;
return $isFound;
}
}
これで、関数は期待どおりに機能しています。foreach()
しかし、私は部分的にそしてすべてにおいてより良いパフォーマンスを必要としています。改善のために何か可能なことはありますか?
アップデート#2:改善点が追加されました
<?php
/**
* Checks if the given words is found in a string or not.
*
* @param Array $words The array of words to be given.
* @param String $string The string to be checked on.
* @param String $option all - should have all the words in the array. any - should have any of the words in the array
* @return boolean True, if found, False if not found, depending on the $option
*/
function in_string ($words, $string, $option)
{
if ($option == "all")
{
foreach ($words as $value)
if (stripos($string, $value) === false)
return false;
return true;
}
else
{
foreach ($words as $value)
if (stripos($string, $value) !== false)
return true;
return false;
}
}
?>