Так же как и везде. Есть базовая валюта и есть коэффициент, на который она умножается. Коэффициент в базе, крон раз в день или чаще заходит на ЦБ и по api получает курс, сохраняет в базу.
А вот как хранить выбор пользователя, тут уже есть варианты. Я бы запихнул это в сессию, но можно вообще запихивать в localStorage, туда же или в (sessionStorage) пихать курс, php всегда при этом рендерит с базовой валютой, а js заменяет уже на нужный. То есть отдать часть математики браузеру. Что иногда может дать прирост производительности.