1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Преобразование чисел

Тема в разделе "Web Coding", создана пользователем Ahmea, 4 ноя 2006.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Ahmea

    Ahmea Прохожие

    Переделываем с другом, тут весч одну. Возникла проблема у нас небольшая. Скрипт наш через ajax маслает неслабыми массивами чисел целых туда-сюда. Посидели прикинули...не покатит на модеме. Ну мы давай думать как можно сожмякать все в пхп, а в js распаковать и наоборот.
    Нашли такую весч: _http://www.compression.ru/arctest/self/ahp.htm
    Но так нам и не удалось найти ее ломаную или в свободном доступе. Потом толи обкурились сигарет, толи еще чего :(, наваяли пару скриптиков. Впринципе делают они что нужно, экономия по трафу около 40% получилась, нам впринципе этого хватило.
    Выложу может комунить сгодится:
    Работает только с целыми числами, числа разделяли "#" и "|".
    Кусок для php:
    PHP:
     function alt_pow($x$power
        { 
            
    $res base_convert($power102); 
            
    $result $x
            
    $t strlen($res); 
            for (
    $i 1$i $t$i++) 
            { 
                  
    $digit $res[$i]; 
                  if (
    $digit != 0
                      
    $result $result $result $x
                  else 
                      
    $result $result $result
            } 
            return 
    $result
        } 

    function 
    pack_s($number)
    {
        
    $minus false;
        if (
    $number[0]=="-")
        {
            
    $number substr($number1strlen($number)-1);
            
    $minus true;
        }
        
    $base '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
        
    $R = (strlen($base));
        
    $result "";
        do{
            
    $ostatok $number $R;
            
    $number floor($number/$R);
            
    $result $base[$ostatok].$result;
        } while (
    $number!=0);
        
        return (
    $minus)? "-".$result $result;
    }

    function 
    unpack_s($text)
    {
        
    $minus false;
        if (
    $text[0]=="-")
        {
            
    $text substr($text1strlen($text)-1);
            
    $minus true;
        }
        
    $base '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
        
    $result 0;
        
    $R = (strlen($base));
        do
        {
            
    $next $text[0];
            
    $val strpos($base$next);
            
            if ((
    strlen($text)-1)!=0)
            {
    $result += $val*alt_pow($Rstrlen($text)-1);
            }
            else
                
    $result += $val;
            
    $text substr($text1strlen($text)-1);
        } while (
    $text!="");
        return (
    $minus)? -1*$result $result;
    }
    Кусок для js:
    PHP:
    function pack_s(number)
    {
        
    minus false;
        if (
    number[0]=='-')
        {
            
    number number.substr(1number.length-1);
            
    minus true;
        }
            
        
    base '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
        
    base.length;
        
    result "";
        do{
            
    ostatok number R;
            
    number Math.floor(number/R);
            
    result base[ostatok]+result;
        } while (
    number!=0);
        
        return (
    minus)? '-'+result result;
    }

    function 
    unpack_s(text)
    {
        
    minus false;
        if (
    text[0]=='-')
        {
            
    text text.substr(1text.length-1);
            
    minus true;
        }
        
    base '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
        
    result 0;
        
    base.length;
        do
        {
            
    next text[0];
            
    val base.indexOf(next);
            
            if ((
    text.length-1)!=0)
                
    result += val*(Math.pow(R,(text.length-1)));
            else
                
    result += val;
            
    text text.substr(1text.length-1);
        } while (
    text!="");
        
        return (
    minus)? result*-result;
    }
    :eek:
     
Статус темы:
Закрыта.