Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
35 / 35
100.00% covered (success)
100.00%
7 / 7
CRAP
100.00% covered (success)
100.00%
1 / 1
CaseName
100.00% covered (success)
100.00%
35 / 35
100.00% covered (success)
100.00%
7 / 7
10
100.00% covered (success)
100.00%
1 / 1
 kebab
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 snake
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 pascal
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 camel
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 lower
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 upper
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 routine
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3/**
4 * @license MIT
5 * @author hazuki3417<hazuki3417@gmail.com>
6 * @copyright 2023 hazuki3417 all rights reserved.
7 */
8
9namespace Selen\Array\Exchanger\Key;
10
11use Selen\Str\Exchanger\CaseName as ExchangerCaseName;
12
13/**
14 * ケースフォールディングを行うクラス(配列要素名)
15 */
16class CaseName
17{
18    /**
19     * 配列要素文字をケバブケースに変換します
20     *
21     * @param array<mixed,mixed> $values 変換する配列を渡します
22     *
23     * @return array<mixed,mixed> 変換後の配列を返します
24     */
25    public static function kebab(array $values): array
26    {
27        $callback = function ($key) {
28            return ExchangerCaseName::kebab($key);
29        };
30        return self::routine($values, $callback);
31    }
32
33    /**
34     * 配列要素文字をスネークケースに変換します
35     *
36     * @param array<mixed,mixed> $values 変換する配列を渡します
37     *
38     * @return array<mixed,mixed> 変換後の配列を返します
39     */
40    public static function snake(array $values): array
41    {
42        $callback = function ($key) {
43            return ExchangerCaseName::snake($key);
44        };
45        return self::routine($values, $callback);
46    }
47
48    /**
49     * 配列要素文字をパスカルケースに変換します
50     *
51     * @param array<mixed,mixed> $values 変換する配列を渡します
52     *
53     * @return array<mixed,mixed> 変換後の配列を返します
54     */
55    public static function pascal(array $values): array
56    {
57        $callback = function ($key) {
58            return ExchangerCaseName::pascal($key);
59        };
60        return self::routine($values, $callback);
61    }
62
63    /**
64     * 配列要素文字をキャメルケースに変換します
65     *
66     * @param array<mixed,mixed> $values 変換する配列を渡します
67     *
68     * @return array<mixed,mixed> 変換後の配列を返します
69     */
70    public static function camel(array $values): array
71    {
72        $callback = function ($key) {
73            return ExchangerCaseName::camel($key);
74        };
75        return self::routine($values, $callback);
76    }
77
78    /**
79     * 配列要素文字をローワーケースに変換します
80     *
81     * @param array<mixed,mixed> $values 変換する配列を渡します
82     *
83     * @return array<mixed,mixed> 変換後の配列を返します
84     */
85    public static function lower(array $values): array
86    {
87        $callback = function ($key) {
88            return ExchangerCaseName::lower($key);
89        };
90        return self::routine($values, $callback);
91    }
92
93    /**
94     * 配列要素文字をアッパーケースに変換します
95     *
96     * @param array<mixed,mixed> $values 変換する配列を渡します
97     *
98     * @return array<mixed,mixed> 変換後の配列を返します
99     */
100    public static function upper(array $values): array
101    {
102        $callback = function ($key) {
103            return ExchangerCaseName::upper($key);
104        };
105        return self::routine($values, $callback);
106    }
107
108    /**
109     * 配列要素文字をタイトルケースに変換します
110     *
111     * @param array<mixed,mixed> $values 変換する配列を渡します
112     *
113     * @return array<mixed,mixed> 変換後の配列を返します
114     */
115    private static function routine(array $values, callable $callback): array
116    {
117        $tmpArr = [];
118
119        foreach ($values as $originKey => $originValue) {
120            $tmpValue = $originValue;
121
122            if (\is_array($originValue)) {
123                // 配列型なら再帰処理
124                $tmpValue = self::routine($originValue, $callback);
125            }
126
127            if (\is_int($originKey)) {
128                $tmpArr[$originKey] = $tmpValue;
129                continue;
130            }
131            // keyがstring型のときの処理
132            $renameKey          = $callback($originKey);
133            $tmpArr[$renameKey] = $tmpValue;
134        }
135        return $tmpArr;
136    }
137}