使用PHP过滤类似于SQL LIKE'%search%'的数组中的值

我使用JQueryUI创build了一个自动填充字段,并将数据存储在一个文档中。 我可以读取数组中的值…但我希望能够返回基于用户input的字母匹配。 所以如果数组包含[orange,blue,green,red,pink,brown,black]和用户typesBL,然后我只返回[blue,black]

array_diff()但没有完整的匹配整个值的数组,我不知道如何使用它…也许是一个正则expression式抛出? 我的两个最弱的技巧数组操作和正则expression式感谢您的帮助!

你不需要使用array_filter和一个自定义/ lambda函数, preg_grep就可以实现:

 $input = preg_quote('bl', '~'); // don't forget to quote input string! $data = array('orange', 'blue', 'green', 'red', 'pink', 'brown', 'black'); $result = preg_grep('~' . $input . '~', $data); 

array_filter() ,基于stripos()的callback过滤函数,应该做的伎俩。

例如,如果input存储在$input ,并且您的数组存储在$data

 $input = 'bl'; $data = array('orange', 'blue', 'green', 'red', 'pink', 'brown', 'black'); 

过滤只保留包含$input的单词(无论string在哪里)可以这样做:

 $result = array_filter($data, function ($item) use ($input) { if (stripos($item, $input) !== false) { return true; } return false; }); var_dump($result); 

而且,在这里,你会得到:

 array 1 => string 'blue' (length=4) 6 => string 'black' (length=5) 

更改过滤callback,您可以:

  • testingstring是否以input开始 – testingstripos()返回的值是否为=== 0
  • 使用区分大小写的匹配函数,如strpos()

您可以简单地遍历数组来查找以给定字母开头的所有string。 在你的平面文件中已经sorting的单词列表可能会加快速度。 我认为这很好:

 $input = strtolower("bl"); //from the user $colors = array("black", "blue", "brown", "..."); //already sorted alphabetically $matches = array(); foreach ($colors as $c){ if (strpos($c, $input) === 0){ //if $c starts with $input, add to matches list $matches[] = $c; } else if (strcmp($input, $c) < 0){ //$input comes after $c in alpha order //since $colors is sorted, we know that we won't find any more matches break; } }