public function zip()
    {
        $args = func_get_args();
        $int_max = 0;

        array_unshift($args, $this->value);

        foreach($args as $item){
            self::mustBeArrayOrHash($item);
            $item = self::toSimpleArray($item);
            $int_count = count($item);

            if($int_count > $int_max){
                $int_max = $int_count;
            }
        }

        $arr = array();

        for($i = 0; $i < $int_max; $i++){
            $arr_prov = array();

            foreach($args as $item){
                $item = self::toSimpleArray($item);

                if(array_key_exists($i, $item)){
                    $arr_prov[] = $item[$i];
                } else {
                    $arr_prov[] = null;
                }
            }

            $arr[] = new A($arr_prov);
        }

        return new A($arr);
    }