在具有相关性的数组中搜索

2022-08-30 22:44:53

我正在用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个项目,所以即使我使用“慢速”算法,也不会花费太多时间。


答案 1

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));
});

答案 2
foreach($array as $item){
  if(strpos($item,"mysearchword")!== false){
    echo 'found';
  }
}

或者您可以使用preg_match进行更灵活的搜索,而不是strpos。