Convert array keys from underscore_case to camelCase recursively

前端 未结 6 2121
一向
一向 2020-12-31 17:59

I had to come up with a way to convert array keys using undescores (underscore_case) into camelCase. This had to be done recursively since I did not know what arrays will be

6条回答
  •  渐次进展
    2020-12-31 18:15

    You can use preg_replace_callback and change all the keys without to loop on each using array_keys and array_combine:

    private function convertKeysToCamelCase($apiResponseArray) {
        $keys = preg_replace_callback('/_(.)/', function($m) {
            return strtoupper($m[1]);
        }), array_keys($apiResponseArray));
    
        return array_combine($keys, $apiResponseArray);
    }
    

    or without regex:

    private function convertKeysToCamelCase($apiResponseArray) {
        $keys = array_map(function ($i) {
            $parts = explode('_', $i);
            return array_shift($parts). implode('', array_map('ucfirst', $parts));
        }, array_keys($apiResponseArray));
    
        return array_combine($keys, $apiResponseArray);
    }
    

    You can modify the second function to deal with multidimensional arrays:

    private function convertKeysToCamelCase($apiResponseArray) {
        $keys = array_map(function ($i) use (&$apiResponseArray) {
            if (is_array($apiResponseArray[$i]))
                $apiResponseArray[$i] = $this->convertKeysToCamelCase($apiResponseArray[$i]);
    
            $parts = explode('_', $i);
            return array_shift($parts) . implode('', array_map('ucfirst', $parts));
        }, array_keys($apiResponseArray));
    
        return array_combine($keys, $apiResponseArray);
    }
    

提交回复
热议问题