如何检查字符串是否包含存储在数组中的字符,但如果字符串包含不在数组中的任何字符,则返回false

时间:2014-09-27 00:29:47

标签: php arrays

基本上我正在根据当天的初始化检查一周中从数组到字符串的几天:

<?php
$check_days = array("M", "T");
$days1 = "MTW";
$days2 = "M";
[insert code to compare $check_days to $days1 and $days2 so that $days1 returns FALSE while $days2 returns TRUE]
?>

3 个答案:

答案 0 :(得分:3)

尝试使用正则表达式character classimplode

if (preg_match('/^['.implode($check_days).']+$/', $days1)) {
    // do some stuff
}

编辑:让我帮忙解释一下这里发生了什么:

implode($check_days)

这将数组的所有元素组合成一个字符串。在你的情况下,这是&#34; MT&#34;。

preg_match('/^[MT]+$/', $days1);

这是一个regular expression,用于检查“开始”之后的情况。 (^),$days1包含&#34; M&#34;或者&#34; T&#34; ([MT]),重复一次或多次(+),然后字符串结束($)。如果是这种情况,则返回true。

希望有所帮助。

答案 1 :(得分:0)

试试这个:

function checkDays($testFor, $inString){
  $a = str_split($inString); $d = array();
  foreach($a as $v){
    if(!in_array($testFor, $v) || in_array($d, $v)){
      return false;
    }
    $d[] = $v;
  }
  return true;
}
$check_days = array('M', 'T');
echo checkDays($check_days, 'MTW');
echo checkDays($checkdays, 'M');

答案 2 :(得分:0)

抱歉,我读错了你的问题,所以我的回答也是错的。我会选择wavemode的解决方案。

原始回答

如果我正确理解您的要求,您需要确保check_days中的所有日期必须存在于要测试的变量中。如果我是正确的,这个功能将起作用:

function checkDays($haystack, $validator) {
    $ok = true;
    foreach ($validator as $day) {
        $ok = (strpos($haystack, $day) !== false) && $ok;
    }
    return $ok;
}

在这个小提琴中看到它的实际效果:http://phiddle.net/6