我有一个数组$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";
答案 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;