用PHP将多维数组中的所有键转换为蛇形大小写

76 阅读1分钟

你可以使用下面的类来转换给定数组中的所有键为蛇形码。

class ArrayKeyCaseConverter
{
    public function snakeCase(array $array): array
    {
        return array_map(
            function($item) {
                if (is_array($item)) {
                    $item = $this->snakeCase($item);
                }
                
                return $item;
            },
            $this->doSnakeCase($array)
        );
    }

    private function doSnakeCase(array $array): array
    {
        $result = [];

        foreach ($array as $key => $value) {
            $key = strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $key));

            $result[$key] = $value;
        }

        return $result;
    }
}

输入

$in = [
    'jolly' => 'jolly',
    'Jolly' => 'Jolly',
    'JOLLY' => 'JOLLY',
    'jollyGood' => 'jollyGood',
    'JollyGood' => 'JollyGood',
    'Jolly1' => [
        'Jolly',
    ],
    'Jolly2Jolly' => [
        'jolly' => 'jolly',
        'Jolly' => 'Jolly',
        'JOLLY' => 'JOLLY',
        'jollyGood' => 'jollyGood',
        'JollyGood' => 'JollyGood',
        'JollyJollyJolly' => [
            'HiHi' => 'HiHi',
            'be_be' => 'be_be',
        ],
    ],
];

输出

Array
(
    [jolly] => Jolly
    [j_o_l_l_y] => JOLLY
    [jolly_good] => JollyGood
    [jolly1] => Array
        (
            [0] => Jolly
        )
    [jolly2_jolly] => Array
        (
            [jolly] => Jolly
            [j_o_l_l_y] => JOLLY
            [jolly_good] => JollyGood
            [jolly_jolly_jolly] => Array
                (
                    [hi_hi] => HiHi
                    [be_be] => be_be
                )
        )
)