在PHP中搜索字符串或字符串的一部分

Sah*_*hir 16 php arrays search product store

我正在用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
    )
Run Code Online (Sandbox Code Playgroud)

所以我想知道我可以做一个搜索,比如"团队",这会让我看到第一个看到这里的项目.我的搜索基于名称(这只是一个小的东西).我知道我可以找到确切的字符串,如果它找不到确切的项目,我只是坚持"最佳结果".效率很好但不是必需的,因为我只有大约50项,所以即使我使用"慢"算法也不会花费太多时间.

Mar*_*c B 39

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');
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用匿名函数来帮助防止命名空间污染:

$matches = array_filter($your_array, function ($haystack) use ($needle) {
    return(strpos($haystack, $needle));
});
Run Code Online (Sandbox Code Playgroud)

  • 如果你的'$ needle`就像我的情况一样是单个字符,你会想要在位置索引为0的情况下进行严格的检查(如果没有找到匹配则对``false`):`return(strpos($ haystack) ,$ needle)!== false);` (9认同)

Hea*_*ota 8

foreach($array as $item){
  if(strpos($item,"mysearchword")!== false){
    echo 'found';
  }
}
Run Code Online (Sandbox Code Playgroud)

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