From 58feea688a4354b52c0c54fb4b8c9e9e907ee2bf Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 15 Feb 2019 12:14:40 +0300 Subject: [PATCH 1/2] Update waUtils::extractValuesByKeys Support for multi arrays. --- wa-system/util/waUtils.class.php | 34 ++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/wa-system/util/waUtils.class.php b/wa-system/util/waUtils.class.php index 8f8078bc6..75a773a0e 100644 --- a/wa-system/util/waUtils.class.php +++ b/wa-system/util/waUtils.class.php @@ -190,11 +190,12 @@ public static function orderKeys(array $array, $order = array()) } /** - * Extract from input associative array only specified keys + * Extract from input associative array only specified keys. * @param $array * @param array $keys - * @param bool $skip Default True + * @param bool $skip default true * @param mixed $populate + * @param bool|string $multi set key or true for extract keys from sub arrays * * That values of $keys that aren't keys in $array will be * + skipped - If $skip === True (default value) @@ -215,17 +216,34 @@ public static function orderKeys(array $array, $order = array()) * $fruits = waUtils::extractValuesByKeys($fruits, $keys, false, 0); * $fruits === array('orange' => 200, 'watermelon' => 400, 'strawberry' => 0); * + * Example with multi + * + * $users = [['id' => 1, 'name' => 'A', 'age' => 18], ['id' => 2, 'name' => 'B', 'age' => 15]]; + * $result = waUtils::extractValuesByKeys($users, ['name', 'age'], true, null, true); + * $result === [['name' => 'A', 'age' => 18], ['name' => 'B', 'age' => 15]]; + * $result = waUtils::extractValuesByKeys($users, ['name', 'age'], true, null, 'id'); + * $result === [1 => ['name' => 'A', 'age' => 18], 2 => ['name' => 'B', 'age' => 15]]; + * * @return array * @since 1.10.0 */ - public static function extractValuesByKeys(array $array, $keys = array(), $skip = true, $populate = null) + public static function extractValuesByKeys(array $array, $keys, $skip = true, $populate = null, $multi = false) { $result = array(); - foreach ($keys as $key) { - if (array_key_exists($key, $array)) { - $result[$key] = $array[$key]; - } elseif (!$skip) { - $result[$key] = $populate; + if ($multi) { + foreach ($array as $key => $sub_array) { + if (!is_bool($multi)) { + $key = $multi; + } + $result[$key] = self::extractValuesByKeys($sub_array, $keys, $skip, $populate, false); + } + } else { + foreach ($keys as $key) { + if (array_key_exists($key, $array)) { + $result[$key] = $array[$key]; + } elseif (!$skip) { + $result[$key] = $populate; + } } } return $result; From 4173383779aacc10f43e9b80891c3258f629b3b4 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 15 Feb 2019 12:15:50 +0300 Subject: [PATCH 2/2] Update waUtils.class.php --- wa-system/util/waUtils.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wa-system/util/waUtils.class.php b/wa-system/util/waUtils.class.php index 75a773a0e..a2b2db9b4 100644 --- a/wa-system/util/waUtils.class.php +++ b/wa-system/util/waUtils.class.php @@ -195,7 +195,7 @@ public static function orderKeys(array $array, $order = array()) * @param array $keys * @param bool $skip default true * @param mixed $populate - * @param bool|string $multi set key or true for extract keys from sub arrays + * @param mixed $multi default false, set key or true for extract keys from sub arrays * * That values of $keys that aren't keys in $array will be * + skipped - If $skip === True (default value)