在PHP数组中搜索一些文本

时间:2016-11-04 17:11:18

标签: php arrays search

如何在PHP数组中搜索单词?

我尝试in_array,但它找到了完全相同的值。

<?php
$namesArray = array('Peter', 'Joe', 'Glenn', 'Cleveland');  
if (in_array('Peter Parker', $namesArray)) {echo "There is.";}
else {echo "There is not.";}

我希望此实例返回true。我该怎么做?有什么功能吗?

代码段:https://glot.io/snippets/ek086tekl0

3 个答案:

答案 0 :(得分:3)

爆炸你的字符串,然后检查两个数组中是否有相同的字符串。

$namesArray = array('Peter', 'Joe', 'Glenn', 'Cleveland');
if (array_intersect(explode(' ', 'Peter Parker'), $namesArray))
    echo "There is.";
else
    echo "There is not.";

答案 1 :(得分:3)

您可以使用正则表达式 - preg_match('i'表示不区分大小写)来检查数组是否包含一些单词

例如:

$namesArray = array('Peter One', 'Other Peter', 'Glenn', 'Cleveland');
$check = false;

foreach($namesArray as $name) 
{
    if (preg_match("/.*peter.*/i", $name)) {
        $check = true;
        break;
    }
}

if($check) 
{
    echo "There is.";
}
else {
    echo "There is not.";
}

答案 2 :(得分:3)

我必须说我喜欢Gre_gor answer的简单性,但是对于更动态的方法,你也可以使用array_filter()

function my_array_search($array, $needle){
  $matches = array_filter($array, function ($haystack) use ($needle){
    // return stripos($needle, $haystack) !== false; make the function case insensitive
    return strpos($needle, $haystack) !== false;
  });

  return empty($matches) ? false : $matches;
}


$namesArray = ['Peter', 'Glenn', 'Meg', 'Griffin'];

示例:

if(my_array_search($namesArray, 'Glenn Quagmire')){
   echo 'There is'; // Glenn
} else {
   echo 'There is not';
}

// optionally:
if(($retval = my_array_search($namesArray, 'Peter Griffin'))){
   echo 'There is';
   print_r($retval); // Peter, Griffin.
} else {
   echo 'There is not';
}

现在$retval是可选的,它捕获一系列匹配的主题。这是有效的,因为如果$matches中的my_array_search变量为空,则返回false而不是空数组。