+ /**
+ * Flatten recursively an array
+ *
+ * @param array $data The data tree
+ * @param string|null $current The current prefix
+ * @param string $sep The key separator
+ * @param string $prefix The key prefix
+ * @param string $suffix The key suffix
+ * @return array The flattened data
+ */
+ public function flatten($data, $current = null, $sep = '.', $prefix = '', $suffix = '') {
+ //Init result
+ $ret = [];
+
+ //Look for data array
+ if (is_array($data)) {
+ //Iteare on each pair
+ foreach($data as $k => $v) {
+ //Merge flattened value in return array
+ $ret += $this->flatten($v, empty($current) ? $k : $current.$sep.$k, $sep, $prefix, $suffix);
+ }
+ //Look flat data
+ } else {
+ //Store data in flattened key
+ $ret[$prefix.$current.$suffix] = $data;
+ }