微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在数组中使用变量

我借用了漂亮的 Cokidoo DateTime类,将常规DateTime转换为“以前的格式”.

我正在开发多语言网站,并希望在一年前,几年前,一个月前用变量替换.

代码示例:

protected $strings = array(
        'y' => array('1 year ago','%d years ago'),'m' => array('1 month ago','%d months ago'),'d' => array('1 day ago','%d days ago'),'h' => array('1 hour ago','%d hours ago'),'i' => array('1 minute ago','%d minutes ago'),'s' => array('Now','%d secons ago'),);

这可以不使用替换方法吗?

显然这不起作用:

‘m’=> array(‘1′.$month_ago,’%d’.$months_ago),

有什么帮助吗?

解决方法

如果它没有扩展DateTime,那么该类会更有用.它唯一能做的就是格式化日期,它完全没有理由成为约会.它可以轻松地按需创建DateTime并使用它而不是$this.

如果你做了这个修改(并适当地将类重命名为例如DateTimeDiffFormatter),那么突然所有的可能性都是开放的:你可以将参数传递给确定要使用的语言的构造函数,或者甚至更好地传递一些对你的i18n组件的引用.然后例如你可以

// I have no idea why this was protected,and probably the class author did not as well
private $strings = array(
    'y' => array('years_ago_1','years_ago_n'),// etc etc
);

return sprintf($localizer->get_string($this->strings[$intervalKey][$pluralKey]),$value);

最后,假设您可以将本地化字符串的格式硬编码为“X分钟前”和类似内容,这是一个非常糟糕的主意.该数字需要是格式字符串的一部分,因为在许多文化中它不在“多久以前”部分之前.

更新

我改编了Ilia的候选解决方案,使其符合上述建议;结果是here.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐