複数のチェックボックスオプションを使用してフォームを操作する場合、一般的な課題は、ユーザーの選択を効率的に保存する方法です。従来の方法は、配列またはコンマ区切りの文字列を使用することですが、これらの方法は、クエリと保存の場合は十分に効率的ではないことがよくあります。この記事では、PHPのbindec()関数を使用して、チェックボックスの選択結果をストレージのバイナリ番号に変換し、それによりデータ管理を簡素化する方法について説明します。
たとえば、ユーザーが関心のあるコンテンツカテゴリを選択できるようにするフォームがあるとします。
テクノロジー(価値は1)
スポーツ(価値は2)
音楽(価値は3)
ゲーム(値は4)
映画(価値は5)
HTMLフォームコードは次のとおりです。
<form method="post" action="https://m66.net/submit.php">
<input type="checkbox" name="interests[]" value="0"> 科学技術<br>
<input type="checkbox" name="interests[]" value="1"> 体育<br>
<input type="checkbox" name="interests[]" value="2"> 音楽<br>
<input type="checkbox" name="interests[]" value="3"> ゲーム<br>
<input type="checkbox" name="interests[]" value="4"> 映画<br>
<input type="submit" value="提出する">
</form>
ここでの各チェックボックスの値は、バイナリビットの位置に対応します。
フォームが送信された後、私たちの目標は、ユーザーが選択したチェックボックスを小数整数に変換し、データベースに保存することです。これの利点は、高速クエリがあり、ストレージスペースを保存することです。
たとえば、ユーザーが「テクノロジー」と「音楽」、つまり0番目と2番目のビットをチェックする場合、取得したバイナリ文字列は10100 (高いビットから低いビットに見えます)であり、デシマルに20に変換します。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$interests = isset($_POST['interests']) ? $_POST['interests'] : [];
// バイナリビットアレイを初期化します
$bits = array_fill(0, 5, '0');
foreach ($interests as $index) {
if (is_numeric($index) && $index >= 0 && $index < 5) {
$bits[(int)$index] = '1';
}
}
// ビットアレイを反転します(前に高い),バイナリ文字列に変換します
$binary_string = implode('', array_reverse($bits));
// 使用 bindec() 小数整数に変換します
$interest_value = bindec($binary_string);
// 出力結果またはデータベースに保存します
echo "バイナリ文字列: $binary_string<br>";
echo "小数格納された値: $interest_value<br>";
// データベースに保存されているロジックは、単独で拡張できます
}
?>
データベースでは、この値を保存するためにint(11)などの整数型フィールドを作成する必要があります。ユーザーの興味を読む必要がある場合は、PHPのDecbin()関数を使用してバイナリ文字列に戻し、ユーザーが選択したアイテムを文字列に分析するだけです。
<?php
$stored_value = 20; // 値の例
$binary = str_pad(decbin($stored_value), 5, '0', STR_PAD_LEFT);
$binary_array = array_reverse(str_split($binary));
foreach ($binary_array as $index => $bit) {
if ($bit === '1') {
echo "ユーザーはASの番号を選択しました $index オプション<br>";
}
}
?>
bindec()およびdecbin()を使用すると、複数のチェックボックスの選択結果を整数に効率的に圧縮できます。このメソッドは、データベースの複雑さを減らすだけでなく、クエリのスピードを上げます。これは、ユーザー設定の頻繁な読み取りとフィルタリングを必要とするアプリケーションシナリオに特に適しています。チェックボックスの選択を管理する方法が心配な場合は、この方法を試してください。