以下代码位于functions.php
以处理数字后的正确复数字形式:
function plural_form($number, $after) {
$cases = array (2, 0, 1, 1, 1, 2);
echo $number.' '.$after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
}
这一个放入single.php
:
$last = new DateTime('2014-10-07');
$today = new DateTime();
$diff = $last->diff($today);
$years = $diff->format('%y');
$months = $diff->format('%m');
$days = $diff->format('%d');
$years_with_word = plural_form($years, array('year','years','years'));
$months_with_word = plural_form($months, array('month','months','months'));
$days_with_word = plural_form($days, array('day','days','days'));
echo "Last time I have coded without errors ".$years_with_word.", ".$months_with_word." and ".$days_with_word." ago.";
由于某些我未知的原因,我得到了以下输出:
1年11个月12天上次我编码时没有错误,以前。
而不是
上次我在1年,11个月和12天前编码时没有错误。
似乎变量的值优先于纯文本值。
这意味着我也无法将输出包装到任何标签中。
可能是什么问题?哪里错了?
答案 0 :(得分:1)
echo
会将结果转储到从函数调用的页面。因此,而不是echo
使用return
,它会将值分配给变量供以后使用。
<?php
function plural_form($number, $after) {
$cases = array (2, 0, 1, 1, 1, 2);
return $number.' '.$after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
}
$last = new DateTime('2014-10-07');
$today = new DateTime();
$diff = $last->diff($today);
$years = $diff->format('%y');
$months = $diff->format('%m');
$days = $diff->format('%d');
$years_with_word = plural_form($years, array('year','years','years'));
$months_with_word = plural_form($months, array('month','months','months'));
$days_with_word = plural_form($days, array('day','days','days'));
echo "Last time I have coded without errors ".$years_with_word.", ".$months_with_word." and ".$days_with_word." ago.";
上次我在1年,11个月和11天前编码时没有错误。