2017-07-18 3 views
0

PHP:Hashtableの最適化、私は私のプログラムに2つの静的ハッシュテーブルを持っている

public static $labels = [ 
    'id' => 'ID', 
    'name' => 'Name', 
    'email' => 'E-mail', 
    'password' => 'Password', 
]; 

public static $columnTypes = [ 
    'id' => 'number', 
    'name' => 'text', 
    'email' => 'text', 
    'password' => 'text', 
]; 

まずデータベース列のラベルと各タイプのための第二(フィルタリングするために必要な)のためです。

私の問題は、スピードの問題につながるもの(ハッシュテーブルはこの方向でかなり遅いのですか?)によってラベルの種類を取得する必要があることがよくあります。

私のアプローチは、次のようになります。私は自分自身を繰り返す必要があり、他の言語

  • のためのサポートが上の静的コンテンツにlabel => typeハッシュテーブルを作成しますが存在しないために悪いです

    1. タイプのハッシュテーブルlabel => typeランタイム(これはPHPで可能ですか?)

    この問題のより良いアプローチやベストプラクティスはありますか?また、PHPでは2番目のアプローチが可能ですか? (たぶん小さな例があります)

  • +1

    [array_flip](http://php.net/manual/en/function.array- flip.php)? – Burki

    +0

    私はフリップをする方法を知っていますが、静的なコンテンツでどうすればいいですか? –

    +0

    * "ハッシュテーブルはこの方向でかなり遅いですか?" * - 間違っています。そして、とにかく、あなたがPHPで持っている唯一のデータ構造は "[array](http://php.net/manual/en/language.types.array.php)"という名前ですが、実際にはハッシュテーブル(別名辞書、別名アソシエーションマップ)。 – axiac

    答えて

    2

    クラスコンストラクタでarray_flipを呼び出してください。それを繰り返さないようにするには、フリップされた配列がすでに設定されているかどうかを確認します。

    class YourClass { 
        public static $labels = [ 
         'id' => 'ID', 
         'name' => 'Name', 
         'email' => 'E-mail', 
         'password' => 'Password', 
        ]; 
        public static $labels_flipped = null; 
    
        public function __construct() { 
         if (!$labels_flipped) { 
          $labels_flipped = array_flip($labels); 
         } 
         ... 
        } 
    } 
    
    1

    あなたが値を持つキーを取得する必要がある場合、あなたはarray_search()array_keys()を使用することができます。

    あなたは配列に倍の大きな数を引き、この種の操作を行う必要がある場合、isset()またはaccess the value using []を使用し、その後(array_flip()を使用して)キーと値を反転することをお勧めします。

    本当の改善を得るために、上の段落で大きなは数千人にカウントする必要があります。それ以外の場合は、データベース、ディスクアクセス、リモートAPIなど、実際に最適化が必要な最適化に集中してください。

    関連する問題