<?php

    class ArrayTool{
        
        
        /**
         * Zmienia wartosc wszystkich kluczy na male lub duze litery z uzyciem wybranego kodowania
         */
        public static function ChangeKeyCaseUnicode( $Arr, $Case = CASE_LOWER , $Charset = "UTF-8" )
        {
            $Case = ($Case == CASE_LOWER) ? MB_CASE_LOWER : MB_CASE_UPPER;
            foreach ($Arr as $k => $v) {
                $ret[mb_convert_case($k, $Case , $Charset )] = $v;
            }
            return $ret;
        }

        /**
         * Zmienia wszystkie klucze oraz wartości na male lub duze litery z uzyciem wybranego kodowania
         */
        public static function ChangeCaseUnicode( $Arr, $Case = CASE_LOWER , $Charset = "UTF-8" )
        {
            $NewArray = self::ChangeKeyCaseUnicode( $Arr , $Case , $Charset );
            $NewArray = array_flip( $NewArray );
            
                return self::ChangeKeyCaseUnicode( $NewArray , $Case , $Charset );
        }
        
        /**
         * Wygenerowanie wszystkich możliwych par podanej tablicy znaków
         */
        public static function AllPairs( $Elements , $NumberKeys = false )
        {
            asort( $Elements );
            
            $Pairs = array();
            
            foreach( $Elements as $ElementFirst )
            {
                foreach( $Elements AS $ElementSecond )
                {
                    if( $ElementFirst != $ElementSecond ){
                        
                        $TmpPair = array( $ElementFirst , $ElementSecond );
                        asort( $TmpPair );
                        $Pairs[join('' , $TmpPair)][( $NumberKeys ? 0 : 'A' )] =  $ElementFirst;
                        $Pairs[join('' , $TmpPair)][( $NumberKeys ? 1 : 'B' )] = $ElementSecond; 
                        
                    }
                }
            }  
            
               return $Pairs;
        }
    }


?>