PHP - 检查数组的所有元素是否都在字符串中

时间:2014-12-31 20:47:00

标签: php arrays string

我有一个数组$my_array,包含n元素和一个字符串$my_string。我想检查$my_array的所有元素是否都在$my_string中。它们在字符串中的顺序并不重要,只要它们都在那里。我正在寻找最有效的解决方案,只有在所有元素都存在的情况下才能获得TRUE

TRUE:

$my_array = array("big", "blue", "sky", "dog"); 
$my_string = "my big dog loves the blue sky"; 

FALSE:

$my_array = array("big", "blue", "sky", "dog"); 
$my_string = "the big blue sky"; 

5 个答案:

答案 0 :(得分:2)

你走了,不要害怕阵列。

  $my_array = array("big", "blue", "sky", "dog");
  $my_string = "my big dog loves the blue sky"

  function arrayInString( array $my_array, $my_string ){
    $my_string = explode(' ', $my_string);
    // difference return all elements of array one not in array two
    $diff = array_diff($my_array, $my_string);
    if(empty( $diff )){
        //if there is no difference there are no elements not in the string.
        return true;
    }
    return false;
 }

没有循环的乐趣!

如果有标点符号,您可以使用

preg_split('/^\w/', $my_string );

而不是explode

答案 1 :(得分:1)

我能想到的两种方式。第一种方式很棒,如果你确定你总是能够分裂成一个给定的角色。它简短,甜美,简单。利用array_dif和简单的explode

function isArrayInString($str, $ara, $splitter=" ") {
    $ret = array_diff($ara, explode($splitter, $str));
    return empty($ret);
}

然而,这似乎不是很有活力,并且基于"分裂"字符串。一种更简单,可能更好的方法是循环遍历数组,并使用strpos确保数组中的每个值都存在。

function isArrayInString($str, $ara, $splitter=" ") {
    foreach($ara as $v) if (strpos($str , $v) === false) return FALSE;
    return $TRUE;
}

所以类似:

$myArray = array("big", "blue", "sky", "dog"); 
$myString = "my big dog loves the blue sky"; 
echo isArrayInString($myString, $myArray);

将输出TRUE

类似于:

$myArray = array("big", "blue", "sky", "dog"); 
$myString = "the big blue sky";
echo isArrayInString($myString, $myArray);

将输出FALSE

答案 2 :(得分:0)

这应该适合你:

<?php

    $my_array = array("big", "blue", "sky", "dog"); 
    $my_string = "my big dog loves the blue sky"; 

    $result = 0;

    foreach($my_array as $value) {
        if (strpos($my_string, $value) !== false) 
            $result+=1; 
    }

    if($result == count($my_array))
        echo "true";
    else
        echo "false";

?>

输出:

true

答案 3 :(得分:0)

function allInString($str, $arr) {
    foreach ($arr as $a) {
       if (strpos($str, $a) === false) {
           return false;
       }
    }
    return true;
}

答案 4 :(得分:-1)

$my_array = array("big", "blue", "sky", "dog");
$my_string = "my big dog loves the blue sky";
$inArray = true;

foreach($my_array as $field)
{
    if(!strpos($my_string,$field))
    {echo "$field is not";
        return false;}
}
return true;