データベースのPre列に都道府県名と間違いデータ(京と、とか)が入っていて、そこから重複無しでリスト化し、一般的な北海道から沖縄までに並べたい場合、少しだけ考える必要があったので、メモ。ただ並べるだけだと、こちらのこちらの思惑通りには並んでくれません。まずは、都道府県リストを作って、それを参照することで解決できました。ブラウザからユーザに都道府県を選んでもらうのが目的だったため今回はPHP。

以下はそのコード。

// 一般的な都道府県の順序
    $prefecture_order = array(
        "北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県",
        "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県",
        "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県",
        "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県",
        "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県",
        "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"
    );

    // 重複無しのPreを取得
    $stmt = $db_google->prepare("SELECT DISTINCT Pre FROM master");
    $stmt->execute();

    $prefectures = array();
    $others = array();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        if (in_array($row['Pre'], $prefecture_order)) {
            $prefectures[] = $row['Pre'];
        } else {
            $others[] = $row['Pre'];
        }
    }

    // 都道府県の順序に合わせてソート
    usort($prefectures, function($a, $b) use ($prefecture_order) {
        return array_search($a, $prefecture_order) - array_search($b, $prefecture_order);
    });

    // 都道府県を出力
foreach ($prefectures as $prefecture) {
    $selected = ($prefecture === "東京都") ? " selected" : "";
    echo '<option value="'.htmlspecialchars($prefecture).'"'.$selected.'>'.htmlspecialchars($prefecture).'</option>';
}

    // それ以外を出力
    foreach ($others as $other) {
        echo '<option value="'.htmlspecialchars($other).'">'.htmlspecialchars($other).'</option>';
    }

(関数部分は、省略)

おまけで最初に選ばれるのは東京都で。