我有一个以逗号分隔的前缀列表,存储在变量
中$prefixes = “fa,go,urg”;
和一个存储在另一个变量中的单词
$word = “good”;
现在我想知道有效的方法来检查$前缀中存储的任何前缀是否是$ word的前缀。
我的意图是
如果存储在$ prefixes中的任何前缀是$ word中存储的单词的前缀,则返回TRUE。
如果$ prefixes中存储的前缀都不是$ word中存储的单词的前缀,则返回FALSE。
注意: - 逗号分隔的前缀列表由用户使用文本框提供。
答案 0 :(得分:0)
可以做的一件事是在数组中包含前缀,然后使用in_array检查数组$word
中是否存在$preArr
<强> in_array 强>
(PHP 4,PHP 5,PHP 7)
in_array - 检查数组中是否存在值
$prefixes = “fa,go,urg”;
$preArr = explode(',', $prefixes); // Convert to array
$word = “good”;
if (in_array($word, $preArr)) {
echo "Success!";
} else {
echo "Failure!";
}
答案 1 :(得分:0)
substr
功能可以达到预期的效果。它检查指定位置good
中的单词prefixes
,这是单词的开头。
从PHP手册:
substr - 返回字符串的一部分
说明
string substr ( string $string , int $start [, int $length ] )
返回由start和length参数指定的字符串部分。
试试这个:
$prefixes = “fa,go,urg”;
$word = “good”;
$Arr[] = explode(',', $prefixes); // Convert to array
$elements = count($Arr[]); //get total elements in array
for ($i=0;$i<count;$i++) {
if (substr( $Arr(i), 0, 4 ) === $word) {
return true;
}
else {return false;}
}
答案 2 :(得分:0)
您的问题可以通过几种方式解决,最具编程性的方法是进行简单检查,遍历$prefixes
并检查0 .....我在哪里i = N - 1
和N = count($prefixes[$i])
function inPrefixArr($prefixes, $word) {
$prefixesInArray = explode(',', $prefixes);
for ($i = 0; $i < count($prefixesInArray); i++) {
if (count($prefixesInArray[$i]) <= count($word)) {
if ($prefixesInArray[$i] == substr($word, 0, count($prefixesInArray[$i]))) {
return True;
}
}
}
return False
}
这将检查任何前缀是否是O(mn)
时间中给出的单词的前缀,其中m
是给定数组中某个前缀的最大长度。它也是最快,最节省空间的解决方案。
由于您似乎并未要求理论/ CS问题,因此在其他数据结构中实现此功能还有其他有趣的方法,如果您反复执行此操作,则可以产生更好的运行时。