加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在数组中使用变量

发布时间:2020-12-13 17:13:17 所属栏目:PHP教程 来源:网络整理
导读:我借用了漂亮的 Cokidoo DateTime类,将常规DateTime转换为“以前的格式”. 我正在开发多语言网站,并希望在一年前,几年前,一个月前用变量替换. 代码示例: protected $strings = array( 'y' = array('1 year ago','%d years ago'),'m' = array('1 month ago',
我借用了漂亮的 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读