From 59fe36ba0450f71277d8405230ee1196c6f734f9 Mon Sep 17 00:00:00 2001 From: Andreas Gerhards Date: Mon, 18 Jun 2018 11:16:20 +1200 Subject: [PATCH] Tweaked the other flattening method as well, allowing keys to be preserved --- src/ORM/ArrayLib.php | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/ORM/ArrayLib.php b/src/ORM/ArrayLib.php index 9f42e1844..7396704ac 100644 --- a/src/ORM/ArrayLib.php +++ b/src/ORM/ArrayLib.php @@ -75,22 +75,14 @@ class ArrayLib } /** - * Flattens a nested array to a one level array + * Flattens a multi-dimensional array to a one level array without preserving the keys * * @param array $array * @return array */ public static function array_values_recursive($array) { - $valuesArray = []; - - array_walk_recursive($array, function($value, $key) use (&$valuesArray) { - if (is_scalar($value)) { - array_push($valuesArray, $value); - } - }); - - return $valuesArray; + return self::flatten($array, false); } /** @@ -240,17 +232,18 @@ class ArrayLib */ public static function flatten($array, $preserveKeys = true, &$out = array()) { - foreach ($array as $key => $child) { - if (is_array($child)) { - $out = self::flatten($child, $preserveKeys, $out); - } else { - if ($preserveKeys) { - $out[$key] = $child; + array_walk_recursive( + $array, + function ($value, $key) use (&$out, $preserveKeys) { + if (!is_scalar($value)) { + // Do nothing + } elseif ($preserveKeys) { + $out[$key] = $value; } else { - $out[] = $child; + $out[] = $value; } } - } + ); return $out; }