+
+ /**
+ * walks recursively through an array with the possibility to change value and key
+ *
+ * @param array $array The array to walk through
+ * @param callable $callback The callback function
+ *
+ * @return array the transformed array
+ */
+ public static function walkRecursive(array &$array, callable $callback)
+ {
+ $new_array = [];
+
+ foreach ($array as $k => $v) {
+ if (is_array($v)) {
+ if ($callback($v, $k)) {
+ $new_array[$k] = self::walkRecursive($v, $callback);
+ }
+ } else {
+ if ($callback($v, $k)) {
+ $new_array[$k] = $v;
+ }
+ }
+ }
+ $array = $new_array;
+
+ return $array;
+ }