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

时间:2017-01-02 06:22:17

标签: php

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

$prefixes = “fa,go,urg”;

和一个存储在另一个变量中的单词

$word = “good”; 

现在我想知道有效的方法来检查$前缀中存储的任何前缀是否是$ word的前缀。

我的意图是

如果存储在$ prefixes中的任何前缀是$ word中存储的单词的前缀,则返回TRUE。

如果$ prefixes中存储的前缀都不是$ word中存储的单词的前缀,则返回FALSE。

注意: - 逗号分隔的前缀列表由用户使用文本框提供。

3 个答案:

答案 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 - 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问题,因此在其他数据结构中实现此功能还有其他有趣的方法,如果您反复执行此操作,则可以产生更好的运行时。