<?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 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;
   }
}