How to convert all keys in a multi-dimenional array to snake_case?

前端 未结 7 2545
無奈伤痛
無奈伤痛 2021-02-14 09:08

I am trying to convert the keys of a multi-dimensional array from CamelCase to snake_case, with the added complication that some keys have an exclamation mark that I\'d like rem

7条回答
  •  没有蜡笔的小新
    2021-02-14 09:41

    This is the modified function I have used, taken from soulmerge's response:

    function transformKeys(&$array)
    {
      foreach (array_keys($array) as $key):
        # Working with references here to avoid copying the value,
        # since you said your data is quite large.
        $value = &$array[$key];
        unset($array[$key]);
        # This is what you actually want to do with your keys:
        #  - remove exclamation marks at the front
        #  - camelCase to snake_case
        $transformedKey = strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', ltrim($key, '!')));
        # Work recursively
        if (is_array($value)) transformKeys($value);
        # Store with new key
        $array[$transformedKey] = $value;      
        # Do not forget to unset references!
        unset($value);
      endforeach;
    }
    

提交回复
热议问题