0

システムにアップロードされたトロフィーデータを収集することで、ゲームでのユーザーの成果を記録するシステムをプログラミングしています。正常に動作しましたが、システムの一部について2つの異なる方法で実行できることを考え始めました。

システムのこの部分は、トロフィーのランク(ブロンズ、シルバー、ゴールド、クリスタル、ジェイド)とその価値のあるポイント数を収集します。各ユーザーはゲームのテーブルのレコードとして、各フィールドはテーブルの主キーとuser_id外部キーを除きます。リストされている正確な順序で取得できる各トロフィーを表します。これは、マシンが簡単に検索できるような方法で並べ替えられていないことを意味します。

これは、各レコードにゲームと、|で区切られたトロフィーのランク順をリストする文字列が含まれる別のテーブルがあるため、explode(STRING、 "|")を使用すると、配列と配列の各インデックスは単一の文字であり、次のようになります。

b | b | s | g | c | g | s | j

つまり、トロフィーランクだけです。ポイント値は、ゲームIDとトロフィーIDを渡す関数を介して実行され、switch caseステートメントは最初に通過したゲームをチェックし、ネストされたスイッチケースはそれぞれのIDをチェックします。これらの場合、トロフィーのポイント値を返します

当然、私は自分のコードを計画していませんでした。上のランク文字列には元々|がありませんでした。そして、私はランクとは異なり、そのようなポイント値を実行しませんでした。スコア値は1〜3桁で、ランク順と同じようにポイント値でも実行できることがわかりました。

データベースから文字列を取得し、explode(STRING、 "|")(およびintval()を使用してポイント値を文字列から整数に変換する、Webサーバーとブラウザーのどちらの方法がより効率的かを知りたいのですが、それらが必要です。計算の場合のように)またはルックアップテーブルのようなswitch caseステートメントを使用して関数を呼び出すか、すでに持っているものが十分に効率的であるかどうか

これらのメソッドは、私が使用しているネストされたループに完全に適合するため、さらに効率的にするために、まったく異なる方法で実行しようとすることにあまり興味がありません。

4

2 に答える 2

0

PHPのシリアル化関数を使用する方が良いと思います:

public function setValues($values) {
    if (is_array($values)) {
        $this->setFieldValue('values', serialize($values)); // for db field
    } elseif (is_string($values)) {
        $this->setFieldValue('values', serialize(explode(",", $values)));  // for db field
    } else {
        throw new Exception("Invalid values data format");
    }
}

public function getValues() {
    $values = $this->getFieldValue('values'); // or something else getting field data from DB
    if ($values == "") {
        return array();
    } else {
        return unserialize($values);
    }
}

このcaeでは、データを保存および復元するための高速で簡単な方法があります。

于 2012-05-14T06:21:08.847 に答える
0

データベースを再構築してみてください。ユーザー、トロフィーテーブル、列のユーザーID、トロフィーID、合計ポイント、その他のデータとの関係が多く、ユーザー名、トロフィータイプ、およびポイント

于 2012-05-14T06:36:19.710 に答える