我有很多帖子,我想在今年发布的帖子中添加一些特别优惠。
offer name - July 20, 2015
offer name - July 20, 2016
offer name - July 20, 2017
...
我这样做:
$a = "offer name - July 20, 2000";
if (preg_match('/2017/',$a)) {
echo 'offer';
}
它正在2017年工作,但我想在2017年和明年的帖子中添加优惠... 18,19。 任何想法?
答案 0 :(得分:3)
此变体按年份迭代输入和过滤器:
<?php
$input = [
'offer name - July 20, 2015',
'offer name - July 20, 2016',
'offer name - July 20, 2017'
];
$output = [];
array_walk($input, function($entry) use (&$output){
if ( preg_match('| - \w+\s+\d+,\s+(\d+)$|', $entry, $tokens)
&& intval($tokens[1]) >= 2017 ) {
$output[] = $entry;
}
});
print_r($output);
这是一个更紧凑的变体:
<?php
$input = [
'offer name - July 20, 2015',
'offer name - July 20, 2016',
'offer name - July 20, 2017'
];
$output = array_filter($input, function($entry){
return
preg_match('| - \w+\s+\d+,\s+(\d+)$|', $entry, $tokens)
&& (intval($tokens[1]) >= 2017);
});
print_r($output);
输出显然是:
Array
(
[0] => offer name - July 20, 2017
)
答案 1 :(得分:2)
你可以使用类似的东西
function isYearAllowed($date, array $allowedYears)
{
try {
$date = new \DateTime($date);
} catch (\Exception $e) {
return false;
}
if(in_array($date->format("Y"), $allowedYears)){
return true;
}else{
return false;
}
}
使用示例
$allowedYears = ['2017','2016'];
if(isYearAllowed("2016-12-31", $allowedYears)){
echo "offer";
}else{
echo "don't offer";
}
exit;
现场演示(https://eval.in/835914)
答案 2 :(得分:2)
您可以使用substr
和intval
功能来实现相同目标。
以下是工作代码。您可以看到它正常工作here:
<?php
$val = array("offer name - July 20, 2000", "offer name - July 20, 2017","offer name - July 20, 2018");
foreach($val as $a)
{
$b = substr($a,strlen($a)-4, 4);
if(intval($b)>= 2017)
{
echo "Offer";
}
else
{
echo "No Offer";
}
echo "\n";
}
?>
答案 3 :(得分:1)
您可以使用日期函数从日期字符串中提取年份,然后直接将其与2017
进行比较,使其值等于或大于。
此功能提供基本功能,而如果年份大于或等于TRUE
则返回2017
,否则返回FALSE
function validate_year($in_string_date){
// Particular to the case in this question, format date for date() function
$in_string_date = str_replace(',','',$in_string_date);
$in_string_date = str_replace(' ','-',$in_string_date);
$valid_year = FALSE;
// Get the year component from the date passed into the function.
$year_in_date = date('Y',strtotime($in_string_date));
/* Check if the year component extracted from the date passed
to the function is greater or ewual to 2017 */
if($year_in_date >= 2017){
$valid_year = TRUE;
}
return $valid_year;
}
答案 4 :(得分:1)
可能有一种更简单的方法可以做到这一点,但在找到它之前,你可以尝试做一个while循环。
1)将变量设置为起始年份,您可以在php date("Y")
中执行静态或年份时间功能。
2)
while('your variable'){ //will always be true
if (preg_match('/'.'your variable'.'/')) //if there is an offer for this year
{
echo 'offer';
'your variable'++;
}
else
{
break;
}
}
它可能不是你想要的,但它应该有用。