PHP:echo将所有纯文本部分放在来自变量的部分之后

时间:2016-09-19 01:17:45

标签: php wordpress

以下代码位于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天前编码时没有错误。

似乎变量的值优先于纯文本值。

这意味着我也无法将输出包装到任何标签中。

可能是什么问题?哪里错了?

1 个答案:

答案 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天前编码时没有错误。