5

当我搜索“银行”时,它应该显示以下列表中的 Bank-List1、Bank-List2。

铁路列表、银行列表 1、银行列表 2、教育、电子商务、文章、铁路列表 1。

有没有要显示的php函数?

我得到了完全匹配的输出。但是这种类型的搜索没有结果。

请帮助我找到解决方案。

4

3 回答 3

2

你可以使用stristr

stristr — Case-insensitive strstr()

<?php    // Example from PHP.net
  $string = 'Hello World!';
  if(stristr($string, 'earth') === FALSE) {
    echo '"earth" not found in string';
  }
// outputs: "earth" not found in string
?> 

因此,对于您的情况,如果您的列表位于名为$values

你可以做

foreach($values as $value)
{
      if(stristr($value, 'bank') !== FALSE) 
      {
        echo $value."<br>";
      }
}
于 2013-04-02T08:45:29.567 回答
1

您可以使用stristr来完成。此函数返回从第一次出现 needle 到结束的所有 haystack。返回匹配的子字符串。如果没有找到 needle,则返回 FALSE。

这是完整的代码:

<?php

  $str="Railway-List, Bank-List1, Bank-List2, Education, Ecommerce, Articles, Railway-List1";
  $findme="bank";
  $tokens= explode(",", $str);
  for($i=0;$i<count($tokens);$i++)
  {
    $trimmed =trim($tokens[$i]);
    $pos = stristr($trimmed, $findme);
    if ($pos === false) {}
    else
    {
        echo $trimmed.",";
    }
  }
?>

演示

于 2013-04-02T08:54:07.373 回答
1

此解决方案仅对这种文本模式有效,例如:word1、word2、word3

<?php
$text = 'Railway-List, Bank-List1, Bank-List2, Education, Ecommerce, Articles, Railway-List1.';


function search_in_text($word, $text){

 $parts = explode(", ", $text);
 $result = array();
 $word = strtolower($word);

 foreach($parts as $v){

  if(strpos(strtolower($v), $word) !== false){
   $result[] = $v;
  }

 }

 if(!empty($result)){
    return implode(", ", $result);
 }else{
    return "not found";
 }
}

echo search_in_text("bank", $text);
echo search_in_text("none", $text);
?>

输出:

Bank-List1, Bank-List2
not found
于 2013-04-02T09:02:08.193 回答