実行速度は気にせず、可読性と保守性(※)の観点から、ご自身がもっとも優れていると思う方法を採用すればよいかと思います。
※データの追加・修正があった際の変更のしやすさ
なぜなら、よほどシビアな性能を求められているのではない限り、アプリケーション全体の実行コストに対するこのコードの実行コストの割合は微々たるもののはずだからです。
ちなみに私なら、-以降は無視して
php
1$languages = array(
2 'ar' => 'アラビア語',
3 'af' => 'アフリカーンス語',
4 'sq' => 'アルバニア語',
5 ...
6);
7
8function get_language_name($arg) {
9 $code = explode('-', $arg, 2);
10
11 return $languages[$code[0]];
12}
とやりますw
もしくは、言語コード-国コードの一覧に他の用途が想定されるなら、以下のようなテーブル構造のDBに格納してしまうかと思います。
sql
1CREATE TABLE languages (
2 code char(2) PRIMARY KEY,
3 name varchar(128) NOT NULL
4);
5
6INSERT INTO languages VALUES
7 ('ar', 'アラビア語'),
8 ('af', 'アフリカーンス語'),
9 ('sq', 'アルバニア語'),
10 ...;
11
12
13CREATE TABLE countries (
14 code char(2) PRIMARY KEY,
15 name varchar(128) NOT NULL
16);
17
18INSERT INTO countries VALUES
19 ('sa', 'サウジアラビア王国'),
20 ('za', '南アフリカ共和国'),
21 ('al', 'アルバニア共和国'),
22 ...;
23
24
25CREATE TABLE language_country (
26 language_code char(2),
27 country_code char(2),
28 PRIMARY KEY (language_code, country_code),
29 FOREIGN KEY (language_code) REFERENCES languages(code),
30 FOREIGN KEY (country_code) REFERENCES countries(code)
31);
32
33INSERT INTO language_country VALUES
34 ('ar', 'sa'),
35 ('af', 'za'),
36 ('sq', 'al'),
37 ...
これなら、DBの一意制約やリレーションを利用できるためにデータの管理が容易になるのと、
例えば
「国コードから、その国で使われている言語を取得する」
など、他の用途にも利用しやすくなるからです。