检查存储在逗号分隔列表中的任何前缀是否是单词前缀的有效方法



我有一个以逗号分隔的前缀列表存储在变量中

$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 - 1N = 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问题,因此还有其他有趣的方法可以在其他数据结构中实现这一点,如果您反复这样做,则可以产生更好的运行时。

相关内容

最新更新