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 に答える