我无法检查逗号分隔的字符串是否包含另一个以逗号分隔的字符串。
假设我有两个字符串
$stringA="red,blue,yellow,green,black,grey,purple,pink,khaki,lemon,orange,white,maroon";
$stringB="blue,green,white,pink,maroon";
我要检查的是$stringB
中的颜色是否包含在$stringA
中?我能想到的唯一方法是将$stringA
转换为数组,并使用in_array
函数逐个检查颜色。还有另一种更简单的方法吗?
提前致谢
答案 0 :(得分:2)
我认为比较数组并不是一个坏主意,但你也可以这样做:
$stringATmp = ','.$stringA.',';
$colors = explode(',', $stringB);
$contains = true;
foreach ($colors as $color) {
if (strpos($stringATmp, ','.$color.',') === false) {
$contains = false;
break;
}
}
答案 1 :(得分:2)
$stringA="red,blue,yellow,green,black,grey,purple,pink,khaki,lemon,orange,white,maroon";
$stringB="blue,green,white,pink,maroon";
$arrayA = explode(',', $stringA);
$arrayB = explode(',', $stringB);
$min = min(array(
count($arrayA),
count($arrayB),
));
$AcontainsB = ($min == count(array_intersect($arrayA, $arrayB)));
答案 2 :(得分:1)
有一些方法比其他方法更快,但没有哪种方法在概念上比将数据加载到某种数据结构更容易。由于您正在讨论以任意顺序检查项目列表与可以按任意顺序排列的另一项目列表,因此没有关于将引用列表(stringA)转换为数据结构,然后查找stringB列表的快捷方式那个数据结构。
加快速度的一种方法。
这样的事情:
$stringAArray = explode(',', $stringA);
$stringAArray = array_flip($stringAArray);
$stringBArray = explode(',',$stringB);
$itemsToFind = count($stringBArray);
foreach ($stringBArray as $colorFromB) {
if (array_key_exists($colorFromB, $stringAArray)) {
$itemsToFind--;
}
}
if ($itemsToFind == 0) {
echo "All B items are in A"
}
这是一个非常快速的查找,可以很好地扩展A和B中的许多项目。
最后的注意事项:对于小型阵列,通过in_array
进行此操作的速度相当快。