检查逗号分隔的字符串是否包含在另一个逗号分隔的字符串中

时间:2013-01-07 16:44:07

标签: php string

我无法检查逗号分隔的字符串是否包含另一个以逗号分隔的字符串。

假设我有两个字符串

$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函数逐个检查颜色。还有另一种更简单的方法吗?

提前致谢

3 个答案:

答案 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列表的快捷方式那个数据结构。

加快速度的一种方法。

  1. 将stringA分解为数组。
  2. 数组翻转stringA数组,使颜色成为数组中的键(值与数值无关)。
  3. 现在,您可以使用以下代码从爆炸的字符串B中查找每种颜色:
  4. 这样的事情:


    $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进行此操作的速度相当快。