2011-07-21 7 views
0

私は、購入したもの、追加したもの、別のものなど、ユーザーの行動を記録するシステムを作っています。例えば、ユーザは、いくつかの製品を購入するとき、次のメッセージがあなたのプロフィールに表示されます:PHPコンプレックスSprintf

Fooのは、私は全体を救うことができる製品A、B、C、DとF.

を買いましたデータベース内の文字列ではありませんが、サイトには複数の言語があり、各言語ごとにレコードを保持することができなくなります。私の考えは、取られたアクションのテンプレートで文字列を持って、それをsprintf関数に渡すことです、しかし、製品の量は、引数の数も同様に変化する可能性があります。この状況で、私はどのように進めるべきですか?

編集#1:質問は、できるだけ多くの引数を受け取ることができるのsprintfで使用する文字列を作成する方法である、Databases: Making a Log of actions, how to handle various references?私の質問は、私が使用しているスキーマがこれです、データベーススキーマに関するものではありません必要です。 次のようなもの:"%s bought the products [magic here]"

答えて

2

アクションごとに固有のコードがあります。 logと呼ばれるテーブル内のフィールドの数でアクションを保管してください:人間が読める記述に

user  action  products 
----------------------------------- 
Foo  BUY   A|B|C|D 

地図BUYをあなたのアプリケーションに必要とされます。

完全正規化を達成するには、必要に応じて個々の製品を分離することができます...もっと多くのものを必要とせず、その表現が簡潔なID(|!)の場合、トークン化は行います良い。

+0

はい、私はこのスキーマを使用しています:http://stackoverflow.com/questions/1989100/databases-making-a-log-of-actions-how-to-handle-various-references/2032042#2032042、しかし、問題は、必要なだけ多くの引数を受け取ることができるsprintfで使用する文字列を作成する方法です。 – JCM

+0

sprintf()はそのようには機能しません。文字列を外部的に構築し、それを単一の '%s'としてsprintfに渡します。 –

+0

@Marc B私はこれを行う別の方法があると思ったが、明らかにあなたが言っている方法は唯一の方法である。 :( – JCM