+// Shrink array('key' => array('key')) to array('key')
+function array_shrink_leaves(& $array)
+{
+ if (! is_array($array)) return $array;
+
+ foreach($array as $key => $value){
+ // Recurse. Removing more leaves beforehand
+ if (is_array($value)) array_shrink_leaves($array[$key]);
+ }
+
+ $tmp = array();
+ foreach($array as $key => $value){
+ if (is_array($value)) {
+ $count = count($value);
+ if ($count == 1 && current($value) == $key) {
+ unset($array[$key]);
+ $array[] = $key;
+ }
+ }
+ }
+
+ return $array;
+}
+