0

我正在显示从客户提供的记录中提取的地址数据,并尝试对其进行正确格式化。每个客户端都可以指定他们希望他们的客户数据如何显示,因此我为每个使用 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

我正在尝试提出一个不需要重新发明轮子的解决方案,但我对其他架构持开放态度,这将使我能够灵活地处理具有相应灵活格式的“可选”数据。

4

1 回答 1

1

基于这个答案,我找到并实施了一个效果很好的解决方案。

本质上,我正在分解格式化组件并将它们与数据组件匹配,这样我就有了类似的东西:

{
  "data": "Bill Smith",
  "format": "%s"
},
{
  "data": "123 Fake St",
  "format": "<br>%s,"
},
{
  "data": "Whoville",
  "format": " %s,"
},
{
  "data": "OH",
  "format": " %s"
}

当我运行上述组件时,我会检查 .data 中的值,如果找到,将格式组件连接到格式变量。最后,我通过vsprintf(). 不完美,但比以前工作得更好并且相当灵活。

于 2013-03-14T21:20:28.417 回答