<?php namespace fphammerle\helpers; class ArrayHelper { /** * @return array */ public static function flatten(array $arr) { return iterator_to_array( new \RecursiveIteratorIterator(new \RecursiveArrayIterator($arr)), false ); } /** * @param mixed $source_array * @param \Closure $callback * @return mixed */ public static function map($source, \Closure $callback) { if(is_array($source)) { return array_map($callback, $source); } else { return $callback($source); } } /** * @param mixed $source_array * @param \Closure $callback * @return mixed */ public static function mapIfSet($source, \Closure $callback) { if($source === null) { return null; } elseif(is_array($source)) { return array_map( function($v) use ($callback) { return $v === null ? null : $callback($v); }, $source ); } else { return $callback($source); } } /** * @param array $source_array * @param \Closure $callback * @return array */ public static function multimap(array $source_array, \Closure $callback) { $mapped_array = []; foreach($source_array as $old_key => $old_value) { $pairs = $callback($old_key, $old_value); if($pairs === null) { // skipp } elseif(is_array($pairs)) { foreach($pairs as $new_key => $new_pair) { $mapped_array[$new_key] = $new_pair; } } else { throw new \UnexpectedValueException( sprintf('expected array, %s given', gettype($pairs)) ); } } return $mapped_array; } }