我正在用 PHP 开发一个非常小的在线商店应用程序。所以我在 PHP 中有一组 map 。我想在数组中搜索一个字符串(一个产品)。我查看了 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));
});
关于php - 在具有相关性的数组中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749415/