Meine Verknüpfung in ähnlichen Fällen ist ein Leerzeichen am Anfang von Kanada und zwei Leerzeichen am Anfang der Vereinigten Staaten hinzuzufügen. Wenn diese als Optionen in einem SELECT-Tag angezeigt werden, sind die Leerzeichen nicht sichtbar, aber die Sortierung bringt sie immer noch nach vorne.
Allerdings kann das in einigen Kontexten ein wenig hacky sein. In Java würde man StringComparator erweitern, die compare() -Methode außer Kraft setzen, um die Spezialfälle in den USA und Kanada zu machen, und dann die Liste (oder das Array) sortieren, die in Ihrem neuen Komparator als Sortieralgorithmus übergeben wird.
Allerdings könnte ich mir vorstellen, dass es einfacher ist, einfach die relevanten Einträge im Array zu finden, sie aus dem Array zu entfernen und sie am Anfang wieder hinzuzufügen. Wenn Sie in einem Framework sind, das das Array neu sortiert, funktioniert es möglicherweise nicht. Aber in den meisten Fällen wird das gut gehen.
[Bearbeiten] Ich sehe, dass Sie einen Hash und nicht ein Array verwenden - so hängt es davon ab, wie Sie die Sortierung tun. Könntest du einfach die USA in den Hash mit einem Schlüssel von -2 setzen, Kanada mit -1 und dann nach ID sortieren? Da ich 11 Jahre lang nicht in Wut mit PHP gearbeitet habe, kann ich mich nicht erinnern, ob es eine eingebaute Sortierung in seinen Hashes hat oder ob Sie das auf Anwendungsebene tun.