/note/tech

連想配列によるif文の削減

こんな感じ↓のデータが渡されて、

$params = [
    'name' => '名前',
    'sex' => '01',
    :
];

こんな感じのデータ↓に変換したいという要件があった時、

$params = [
    'name' => '名前',
    'sex' => [
         'code' => '01'
         'label' => 'male'
    ],
    :
];

これしきのことで関数を増やしたくないので無名関数で条件分岐してた↓けど、

$converted = [
    'name' => $params['name'],
    'sex' => [
        'code' => $params['sex'],
        'label' => (function () {
            if ($params['sex'] === '01') {
                return 'male'
            }
            if ($params['sex'] === '02') {
                return 'female'
            }
        })(),
    ],
    :
];

連想配列でマッチングさせた方↓がシンプルだったなぁ、と。

$converted = [
    'name' => $params['name'],
    'sex' => [
        'code' => $params['sex'],
        'label' => ['01' => 'male', '02' => 'female'][$params['sex']],
    ],
];

ただし、これだといずれにもマッチしない場合に値が入らないのがネックと言えばネックではある。