在PHP中搜索字符串或字符串的一部分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PHP中搜索字符串或字符串的一部分相关的知识,希望对你有一定的参考价值。
我正在用php做一个非常小的在线商店应用程序。所以我在PHP中有一组地图。我想在数组中搜索字符串(产品)。我在PHP中查看了array_search,似乎只查找完全匹配。你们知道更好的方法来实现这个功能吗?因为这只是我实际做的一小部分,所以我希望有一些内置的东西。任何想法?
谢谢!
编辑:该数组包含以下格式的“产品”:
[6] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 2000-YM
)
[Name] => Team Swim School T-Shirt
[size] => YM
[price] => 15
[group] => Team Clothing
[id] => 2000-YM
)
[7] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 3000-YS
)
[Name] => Youth Track Jacket
[size] => YS
[price] => 55
[group] => Team Clothing
[id] => 3000-YS
)
所以我想知道我可以做一个搜索,比如“团队”,这会让我看到第一个看到这里的项目。我的搜索基于名称(这只是一个小的东西)。我知道我可以找到确切的字符串,如果找不到确切的项目,我只会坚持“最佳结果”。效率很好但不是必需的,因为我只有大约50项,所以即使我使用“慢”算法也不会花费太多时间。
array_filter
允许您指定自定义函数来进行搜索。在您的情况下,一个简单的函数,使用strpos()
来检查您的搜索字符串是否存在:
function my_search($haystack) {
$needle = 'value to search for';
return(strpos($haystack, $needle)); // or stripos() if you want case-insensitive searching.
}
$matches = array_filter($your_array, 'my_search');
或者,您可以使用匿名函数来帮助防止命名空间污染:
$matches = array_filter($your_array, function ($haystack) use ($needle) {
return(strpos($haystack, $needle));
});
foreach($array as $item){
if(strpos($item,"mysearchword")!== false){
echo 'found';
}
}
或者您可以使用preg_match进行更灵活的搜索而不是strpos。
不幸的是,搜索是计算机科学中最难处理的事情之一。如果您基于文字字符串匹配或正则表达式(正则表达式)构建搜索,您可能会发现您对返回的结果的相关性不满意。
如果你有兴趣卷起你的袖子并使用更复杂的解决方案变得有点脏,我会尝试Zend的Lucene实现(http://framework.zend.com/manual/en/zend.search.lucene.html)。我用它在网站上实现了搜索。花了几天时间,但结果比文字字符串匹配的15分钟解决方案好多了。
如果您想了解更多信息,请告诉我。
祝你好运!
PS。这是一个例子:http://devzone.zend.com/article/91
我认为Marc B的答案是一个很好的起点,但对我来说它有一些问题。比如你必须知道Needle在“编译时”是什么,因为你不能动态地改变那个值。如果针头出现在弦乐元素的开头,它就会像它根本不存在一样。所以在经过一些小试验之后,我想出了解决这两个问题的方法。所以你不必为你想要使用的每一根针创建一个新的功能。
function my_search($haystack)
{
global $needle;
if( strpos($haystack, $needle) === false) {return false;} else {return true;}
}
它将被称为这样:
$needle="item to search for";
$matches = array_filter($my_array, 'my_search');
现在可以在与其余代码相同的范围内访问针,您可以将针设置为您想要的任何其他字符串变量,包括用户输入。
您可以在每个数组元素上使用正则表达式
foreach($array as $value)
{
//... your search statement for $value
}
如果你想要部分匹配,遍历数组并使用substr:
http://php.net/manual/en/function.substr.php
如果你有一个“小”商店,这应该足够了......
我有相同的问题但我创建了i函数通过传递数组,键和值来搜索数组。
public function searchinarr($array, $key, $value)
{
$results = array();
for($i=0;$i<count($array);$i++)
{
foreach($array[$i] as $k=>$val)
{
if($k==$key)
{
if(strpos($val,$value)!== false)
{
$results[] = $array[$i];
}
}
}
}
return $results;
}
以上是关于在PHP中搜索字符串或字符串的一部分的主要内容,如果未能解决你的问题,请参考以下文章