我正在显示从客户提供的记录中提取的地址数据,并尝试正确格式化。每个客户端都可以指定他们希望客户数据显示的方式,因此我为每个使用php sprintf()及其格式化功能的客户端使用可编辑的基于JSON的模板。
所以客户A希望他们的地址显示如下:
Bill Smith
123 Fake St
Whoville, OH
保存的格式为%s<br>%s<br>%s, %s
。
客户B希望:
Bill Smith
123 Fake St, Whoville, OH 94301
保存格式为%s<br>%s, %s, %s %s
然后我将这些格式存储在一个特定于客户端的模板中,该模板告诉我要从哪个字段中提取和格式,即:
{
"fields": [
"full_name",
"street",
"city",
"state",
"zip"
],
"format": "%s<br>%s, %s, %s %s"
}
解码JSON,提取数据并使用提供的格式使用sprintf()
编写数据效果很好,并且不需要我创建自定义格式化函数来处理各种地址格式。 问题是,如果一个数据是空的,它会显示,即如果街道地址丢失,我们有:
Bill Smith
, Whoville, OH 94301
我正在尝试提出一个不需要重新发明轮子的解决方案,但我对其他架构开放,这将使我能够灵活地处理“可选”数据并具有相应的灵活格式。
答案 0 :(得分:1)
基于this answer,我发现并实施了一个运行良好的解决方案。
基本上,我正在分解格式化组件并将它们与数据组件匹配,因此我有类似的东西:
{
"data": "Bill Smith",
"format": "%s"
},
{
"data": "123 Fake St",
"format": "<br>%s,"
},
{
"data": "Whoville",
"format": " %s,"
},
{
"data": "OH",
"format": " %s"
}
当我浏览上面的组件时,然后检查.data中的值,如果找到,则将格式组件连接到格式变量。最后,我通过vsprintf()
运行数据组件和连接格式字符串。不完美,但工作比以前更好,相当灵活。