基本上我正在根据当天的初始化检查一周中从数组到字符串的几天:
<?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]
?>
答案 0 :(得分:3)
尝试使用正则表达式character class和implode:
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