From fa73882a1221136f502b7c5a8a57a91fa7d2542a Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Wed, 25 Jan 2017 17:42:54 +0100 Subject: Second version of it::map with keys: Handle 'null', '1' for code and Traversable objects for array --- it.class | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'it.class') diff --git a/it.class b/it.class index 3846fe5..77c51f7 100644 --- a/it.class +++ b/it.class @@ -950,15 +950,20 @@ static function date($format = "", $stamp = null) * Iterate over an array, replacing every element by function value or expression * @param $code The function or expression to apply. Expression may contain $k for keys and $v for values * @param $array The array to iterate over + * @param $p['keys'] Only modify elements with given keys (keys can be array or comma separated) */ -static function map($code, $array) +static function map($code, $array, $p = null) { static $cache = array(); + if (is_string($code) && it::match('^[\w:]+$', $code) && is_callable($code)) + $code .= '($v)'; + if (!is_callable($func = $code) && !($func = $cache[$code])) $func = $cache[$code] = create_function('$k,$v', "return $code;"); - foreach ($array as $k => $v) + $result = is_array($array) ? $array : iterator_to_array($array); + foreach (isset($p['keys']) ? it::filter_keys($array, $p['keys']) : $array as $k => $v) $result[$k] = $func($k, $v); return (array)$result; -- cgit v1.2.3