4

假设一个字符串:

$str = 'a_b_c';

我想匹配上面所有可能的组合a, b, c。例如:

b_a_c, c_a_b, a_c_b..etc 将true与上述比较时给出$str

笔记:

$str可能是随机的。例如:a_bk_l_m_n

4

2 回答 2

7

我会将您的字符串拆分为一个数组,然后将其与要匹配的元素数组进行比较。

$originalList = explode('_', 'a_b_c');
$matchList = array('a', 'b', 'c');
$diff = array_diff($matchList, $originalList);
if (!empty($diff)) {
    // At least one of the elements in $matchList is not in $originalList
}

谨防重复元素和不重复元素,具体取决于数据的输入方式。

文档:

于 2012-11-24T06:01:09.053 回答
2

没有内置的方法可以快速做到这一点。您的任务可以通过许多不同的方式完成,它们的一般程度会有所不同。你没有提到空值或检查字符串的格式,所以这样的事情可能适合你的目的:

function all_combos($str,$vals) {
  $s=explode("_",$str);
  foreach($s as $c) {
    if(!in_array($s,$vals)) return false;
  }
  return true;
}

打电话喜欢all_combos("b_c_a",array("a","b","c"));

于 2012-11-24T06:03:04.913 回答