翻译是转换秒的人类可读的字符串
In this website一个PHP函数,我发现一个函数转换秒的人类可读的格式,例如:翻译是转换秒的人类可读的字符串
3周,2天,1小时27分,52秒
我想翻译它的意大利语,所以我刚刚翻译了数组键。作用就是现在这个
function secondsToHumanReadable($secs) {
$units = array(
'settimane' => 604800,
'giorni' => 86400,
'ore' => 3600,
'minuti' => 60,
'secondi' => 1
);
foreach ($units as &$unit) {
$quot = intval($secs/$unit);
$secs -= $quot * $unit;
$unit = $quot;
}
return $units;
}
它工作得很好,但有一个小问题:在英语中所有的复数用一个字母较少的结束,但不幸的是在意大利它是不一样的,因为你可以看到下面。
English Italian
- weeks, week - settimane, settimana
- days, day - giorni, giorno
- hours, hour - ore, ora
- minutes, minute - minuti, minuto
- seconds, second - secondi, secondo
我想找到一个解决打印奇异键,当值== 1
我在想,我可以在阵列与另一个阵列有奇异键,使用array_combine()合并。
$singular_units = array(
'settimana',
'giorno',
'ora',
'minuto',
'secondo'
);
print_r(array_combine($singular_units, $units));
/* print_r:
Array
(
[settimana] => 604800
[giorno] => 86400
[ora] => 3600
[minuto] => 60
[secondo] => 1
)
*/
上面的阵列是我需要的,但我不能够使用它,因为我只是不能使用其他foreach
。
$seconds = 12345*60; // just an example
$units = secondsToHumanReadable($seconds);
$time_string = '';
foreach ($units as $u => $v)
if (!empty($v))
$time_string.= $v.' '.$u.', ';
echo substr($time_string, 0, -2);
// 1 settimane, 1 giorni, 13 ore, 45 minuti
// this echo is not correct :(is expected to be like this:
// 1 settimana, 1 giorno, 13 ore, 45 minuti
我该如何实现单数的单词?
任何帮助是真的赞赏!提前感谢你!
你可以以任何你喜欢的方式来实现它们,恕我直言,最好不像目前的解决方案,缺乏清晰度和可读性(至少这是如何local-var-mutation-with-refs-and-variable-ping-pong look喜欢我)。
只是一个可能的解决方案:
$input = 12345 * 60;
$units = array(
604800 => array('settimana', 'settimane'),
86400 => array('giorno', 'giorni'),
// etc
);
$result = array();
foreach($units as $divisor => $unitName) {
$units = intval($input/$divisor);
if ($units) {
$input %= $divisor;
$name = $units == 1 ? $unitName[0] : $unitName[1];
$result[] = "$units $name";
}
}
echo implode(', ', $result);
你可能想要这样的东西?
function secondsToHumanReadable($secs) {
$units = array(
'settimane' => 604800,
'giorni' => 86400,
'ore' => 3600,
'minuti' => 60,
'secondi' => 1
);
foreach ($units as $key => &$unit) {
$this_unit = intval($secs/$unit);
$secs -= $this_unit * $unit;
if($this_unit == 1):
switch($key):
case "settimane":
$this_key = "settimana";
break;
case "giorni":
$this_key = "giorno";
break;
case "ore":
$this_key = "ora";
break;
case "minuti":
$this_key = "minuto";
break;
case "secondi":
$this_key = "secondo";
break;
endswitch;
else:
$this_key = $key;
endif;
$results[$this_key] = $this_unit;
}
return $results;
}
这将返回全阵列,而不是你最初的一...与结果...
也是要提到的一些框架有变形器类,这将决定的复数/奇异版本一个字,但是我不确定他们是否支持意大利语等语言,但可能值得一看。我个人使用CakePHP Inflector,因为它是一个独立的lib,我不需要带任何其他文件。
CakePHP的变形器类 http://api.cakephp.org/class/inflector
主义变形器:http://www.doctrine-project.org/api/common/2.0/doctrine/common/util/inflector.html
看起来非常有趣:)但不幸的是只适用于英语 – Simone
真棒!谢谢! – Simone