我有一个以逗号分隔的前缀列表存储在变量中
$prefixes = “fa,go,urg”;
以及存储在另一个变量中的单词
$word = “good”;
现在我想知道有效的方法来检查存储在$prefixes中的任何前缀是否是$word的前缀。
我的意图是
如果存储在 $prefixes 中的任何前缀是存储在 中的单词的前缀$word则返回 TRUE。
如果存储在$prefixes中的任何前缀都不是存储在 中的单词的前缀$word则返回 FALSE。
注意:- 逗号分隔的前缀列表由用户使用文本框提供。
可以做的一件事是将前缀放在数组中,然后使用in_array检查数组中是否存在$word
$preArr
in_array
(菲律宾比索 4, 菲律宾比索 5, 菲律宾比索 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!";
}
substr
函数可以达到预期的结果。它会在指定位置(即单词的开头)检查prefixes
中的单词good
。
来自 PHP 手册:
substr — 返回字符串的一部分
描述
string substr ( string $string , int $start [, int $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;}
}
你的问题可以通过几种方式解决,最程序化的方法是做一个简单的检查,遍历$prefixes
,然后根据0.....i进行检查,其中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问题,因此还有其他有趣的方法可以在其他数据结构中实现这一点,如果您反复这样做,则可以产生更好的运行时。