使用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开始 – testing
stripos()
返回的值是否为=== 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; } }