開発情報・ナレッジ

投稿者: 株式会社ゴンドラ 2026年2月26日 (木)

アンケートの選択肢をシャッフルする方法

アンケートを実施した際、回答が偏ってしまった経験はありませんか?
本記事では、回答のバイアスを防ぐために選択肢の順番をシャッフルする方法を解説します。

反映イメージ

デモサイトはこちら 上記デモサイトでは、リロードする度にシャッフルされます。

作業手順

処理コード

PHPを使用するページには、以下の専用タグをHTMLコメントとして記述する必要があります。

<?php // <!-- SMP_DYNAMIC_PAGE DISPLAY_ERRORS=OFF NAME=SAMPLE --> ?>


また、SPIRALではshuffle関数の使用ができないため以下のように記述します。
コードを
<head>
タグの中に設置してください。

   <?php //<!-- SMP_DYNAMIC_PAGE DISPLAY_ERRORS=ON NAME= shuffle SAMPLE--> ?> 
   
   <?php 
   //エスケープ用の関数
    function h($str){
      return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
    }
    // 選択肢を配列で定義
    $options = [
      ['value' => '1', 'text' => '回答1', 'checked' => '$shuffleTest:1$'],
      ['value' => '2', 'text' => '回答2', 'checked' => '$shuffleTest:2$'],
      ['value' => '3', 'text' => '回答3', 'checked' => '$shuffleTest:3$'],
      ['value' => '4', 'text' => '回答4', 'checked' => '$shuffleTest:4$'],
      ['value' => '5', 'text' => '回答5', 'checked' => '$shuffleTest:5$'],
    ];


    // 選択肢をシャッフル
    $count = count($options);
    for ($i = $count - 1; $i > 0; $i--) {
      $j = mt_rand(0, $i);
      // 配列の要素を交換
      $temp = $options[$i];
      $options[$i] = $options[$j];
      $options[$j] = $temp;
    }


    ?>

※ 変更が必要な部分
「回答1~4」部分は、表示させたい選択肢の名称に変更してください。
「$shuffleTest:1$」部分は、選択肢の差し替えキーワードに変更してください。

出力用コード

以下のように置き換える
▼変更前

 <ul class="cf">
   <li><label><input class="input" type="checkbox" value="1" name="shuffleTest" $shuffleTest:1$><span>回答1</span></label></li>
   <li><label><input class="input" type="checkbox" value="2" name="shuffleTest" $shuffleTest:2$><span>回答2</span></label></li>
   <li><label><input class="input" type="checkbox" value="3" name="shuffleTest" $shuffleTest:3$><span>回答3</span></label></li>
   <li><label><input class="input" type="checkbox" value="4" name="shuffleTest" $shuffleTest:4$><span>回答4</span></label></li>
   <li><label><input class="input" type="checkbox" value="5" name="shuffleTest" $shuffleTest:5$><span>回答5</span></label></li>
 </ul>


▼変更後

<ul class="cf">
    <?php foreach ($options as $option): ?>
        <li>
            <label>
                <input class="input" type="checkbox"
                    value="<?php echo h($option['value']); ?>"
                    name="shuffleTest"
                    <?php echo $option['checked'];?>>
                <span><?php echo h($option['text']); ?></span>
            </label>
        </li>
    <?php endforeach; ?>
</ul>

※ 変更が必要な部分
name値の部分は、自身で設定したフィールドの差し替えキーワードに変更してください。

まとめ

本記事のポイント
・選択肢をシャッフルすることで、回答順によるバイアスを軽減できます
・shuffle関数が使えない場合でも実装可能です
・既存のHTMLを大きく変えずに応用が可能です

【お知らせ】本実装の構築代行・カスタマイズを承ります

記事でご紹介した内容や、貴社の要件に合わせた柔軟なカスタマイズ開発を承っております。
SPIRALの専門チームが要件定義から実装まで一貫してサポートいたしますので、まずはお見積もりをご依頼ください。

カスタマイズの見積もりを依頼する
解決しない場合はこちら コンテンツに関しての
要望はこちら