如何确定一个数组是否是另一个数组的子集(第一个数组中的所有元素都存在于第二个数组中)?
$s1 = "string1>string2>string3>string4>string5>string6>";
$arr1 = explode(">", $s1);
$s2 = "string1>string4>string5";
$arr2 = explode(">", $s2);
$isSubset = /* ??? */
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 53
if (array_intersect($array1, $array2) == $array1) {
// $array1 is a subset of $array2
}
Run Code Online (Sandbox Code Playgroud)
sha*_*ail 17
简单:使用数组减法.
在数组减法中,您将知道一个数组是否是另一个数组的子集.
例:
if (!array_diff($array1, $array2)) {
// $array1 is a subset of $array2
}
Run Code Online (Sandbox Code Playgroud)
参考:array_diff
你也可以用array_intersect.
Eli*_*gem 17
如果你从字符串开始,你可以检查strstr($fullString,$subsetStr);.但是,只有当所有角色都具有相同的顺序时'abcd','cd'才会起作用:会起作用,但'abcd','ad'不起作用.
但是,而不是写你自己的自定义,功能,你应该知道,PHP有吨的阵列功能,所以它的嘶鸣上不可能没有一个std功能,可以做你需要它做什么.在这种情况下,我建议array_diff:
$srcString = explode('>','string1>string2>string3>string4>string5');
$subset = explode('>','string3>string2>string5');
$isSubset = array_diff($subset,$srcString);
//if (empty($isSubset)) --> cf comments: somewhat safer branch:
if (!$isSubset)
{
echo 'Subset';
return true;
}
else
{
echo 'Nope, substrings: '.implode(', ',$isSubset).' Didn\'t match';
return false;
}
Run Code Online (Sandbox Code Playgroud)