ビット演算を使用できます。基本的に、2 つ以上の数値に対してビットごとのORを実行し、テストする数値に対してビットごとのANDを実行して、数値が OR されたかどうかを確認することで効果を達成します。
例:
ユーザーに流暢な言語を選択してもらいたいとします。表示するオプションは、英語、ドイツ語、ロシア語、スペイン語です。
まず、オプションを 2 の累乗で定義することから始めます。
$LANGUAGE_ENGLISH = 2;
$LANGUAGE_RUSSIAN = 4;
$LANGUAGE_GERMAN = 8;
$LANGUAGE_SPANISH = 16;
ユーザーが英語とロシア語を選択したとします。次のようにオプションを組み合わせます。
$selected_options = 0; // we'll store the result in here
$selected_options = $LANGUAGE_ENGLISH | $LANGUAGE_RUSSIAN;
//It can also be express as:
//$selected_options |= $LANGUAGE_ENGLISH;
//$selected_options |= $LANGUAGE_RUSSIAN;
$selected_options
変数には、ユーザーのオプションが含まれるようになりました
。オプションが格納されているかどうかを確認するには、ビットごとの AND を実行します。結果が 0 の場合、値は保存されていません。それ以外の場合、値は格納されました。
例:
if ($selected_options & $LANGUAGE_ENGLISH != 0)
echo "English was selected";
else
echo "English was NOT selected";
要件:
すべての数値には、重複しないビットが必要です。3
重複を避ける最も簡単な方法は、2 の累乗の数字のみを使用2
すること2
です。ただし、 はまたはと1
重複しないため、両方で使用できます。2
4
1: 0001
2: 0010
3: 0011
4: 0100
それが役立つことを願っています