Стандартные решения (велосипеды)

Тема в разделе "Как сделать...", создана пользователем t3s, 17 сен 2010.

  1. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    Ниже представлены готовые кусочки кода, т.н. "велосипеды"... для того, чтобы новички не пытались изобретать велосипед заново (хотя иногда это бывает полезно)

    Проверяем значения в базе на дубли
    (полезно например при регистрации - проверить свободен ник или занят)

    PHP:
    $result mysql_query ("SELECT * FROM base_users WHERE nick = '$nick'");
    if (
    $row mysql_fetch_array($result)) {
        
    $dubl $row['id'];
    }else{
    $dubl 0;}
    if(
    $nick !="" AND $dubl==0){
    // регистрируем юзера
    }else{
    // предлагаем выбрать другой ник
    }
    Проверяем валидность введенного емайл-а
    PHP:
    $email_address $_POST['email_address'];
    if(!
    preg_match("/^\w+([\.\w]+)*\w@\w((\.\w)*\w+)*\.\w{2,4}$/"$email_address))
    {
    // невалидный
    exit;
    }
    // валидный
    Делаем правильные окончания
    Англоязычным пользователям писать гораздо легче в силу ряда причин. Во-первых, английский больше похож на php чем русский, во-вторых им не требуется тратить время на переключение раскладки, и в третьих у них отсутствуют падежи (у них 2 days, и 10 days, а у нас 2 дня, но 10 дней)... На первые два пункта повлиять нереально, а вот подобрать правильное окончание поможет простая функция:
    PHP:
    function  ends($count)
    {
    $a substr($count, -1);
    if(
    $a==1$str="ь";
    elseif(
    >= || $a <= 4$str="я";
    else 
    $str="ей";
    return 
    $str;


    Выводим так:
    PHP:
    $users=24//получаем количество
    echo $users."&nbsp;юзвер".ends($users); //выводим с правильным окончанием
    зы
    данный топик будет периодически дополняться... а если у вас есть свои "велосипеды", не стесняйтесь выкладывать
    ззы
    обратите внимание на слово свои в предыдущей фразе
    не нужно копипастить примеры с пхп.нет или аналогичных ресурсов - подобные примеры будут удаляться, а по отношению к копипастерам будут приняты меры
     
    Серега, SanGreel и 3meyc нравится это.
  2. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    С окончаниями не все так просто. Нумеруются не только дни, но и,например, недели (ж.р., окончание - гласн.), месяцы (м.р. оканч. на согл.)....
    В общем в Великом и Могучем есть 3 рода, 2 числа, прибавь к ним окончания именительного падежа... В общем нормально просклонять слово - выльется в небольшой, но все же проект. А идея интересная, думал сделать когда-то, только не нашел кто ее оплатит :))

    Раз уж о велосипедах речь - вот мой. Называется он - подтверждение регистрации с почты (когда первый раз воспользоваться аккаунтом можно после перехода по ссылке)

    Файл Confirm.php:
    PHP:
    ...соединяемся с базой......
    $u= (int) $_GET('u');
    $key=$_GET('code');

    $res=mysql_query("SELECT * FROM users WHERE id='$u'");
    $user=mysql_fetch_assoc($res);

    if(
    $key!=MD5($user['login'].$user['salt'].$user['password'])) die('Error');

    //здесь  в поле status 1-й бит 0- не подтвержден, 1-подтвержден
    //остальные биты могут использоваться по надобности (бан, пол, удаление....)
    mysql_query("UPDATE users SET `status`=`status`|1 WHERE id='{$user['id']}'"); 

    header ("Location: index.php");  
    ?>
    Ну и генерация ссылки и отправка на почту:

    PHP:
    if(УСПЕШНАЯ РЕГИСТРАЦИЯ)){
        
    //Шаблон письма регистрации 
        
    $msg=file_get_contents(dirname(__FILE__).'/mails/onRegister.html');

        
    //в тексте письма вместо плейсхолдера {:user:} вставляется имя или логин
        
    $msg=str_replace('{:user:}',$user['name'],$msg); 
        
        
    $x=MD5($login.$salt.$password);
        
    $url=АДРЕС_САЙТА."/confirm.php?u={$user['id']}&code={$x}";

        
    //в тексте письма вместо плейсхолдера {:link:} вставляется УРЛ
        
    $msg=str_replace('{:link:}',$url,$msg);                 

        
    Отправка $msg на почту     
      
        
    print <<<RS
        <h4>Регистрация прошла успешно. На указанный вами почтовый ящик было отправлено письмо. Для подтверждения регистрации перейдите по указанной в письме ссылке.</h4>
    RS;
      }
     
    metal-stroi-komplekt и 3meyc нравится это.
  3. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    мои колеса от велосипеда )
    Сравнивание строк, учетом регистра или без него
    Код:
    /**
       * Сравнивание строк, учетом регистра или без него
       * @param string
       * @param string
       * @param boolean
       * @return boolean
       */
      function compare($str1, $str2, $caps=false) {
    //Возвращает < 0, если str1 меньше str2; > 0, если str1 больше str2, и 0, если они равны.
        if ($caps):
          if (!strcasecmp($str1, $str2)):
            return true;
          endif;
        else:
          if ($str1 === $str2):
            return true;
          endif;
        endif;
        return false;
      }
    
    Умная обрезка строк до конца слов, по указанной длине
    Код:
      /**
       * Умная обрезка строк до конца слов, по указанной длине
       * @param string
       * @param integer
       * @return string
       */
      function cut(&$str, $length=450) {
        if (strlen($str) >= $length):
          $str = substr($str, 0, $length - strlen(strrchr(substr($str, 0, $length), " ")));
          return $str . " ...";
        endif;
        return $str;
      }
    
    Локализация даты на любой язык
    с сохранением задаваемых параметров
    Код:
    DEFINE('_MONDAY', 'Понедельник');
    DEFINE('_TUESDAY', 'Вторник');
    DEFINE('_WEDNESDAY', 'Среда');
    DEFINE('_THURSDAY', 'Четверг');
    DEFINE('_FRIDAY', 'Пятница');
    DEFINE('_SATURDAY', 'Суббота');
    DEFINE('_SUNDAY', 'Воскресенье');
    DEFINE('_MON', 'пн');
    DEFINE('_TUE', 'вт');
    DEFINE('_WED', 'ср');
    DEFINE('_THU', 'чт');
    DEFINE('_FRI', 'пт');
    DEFINE('_SAT', 'сб');
    DEFINE('_SUN', 'вс');
    DEFINE('_JANUARY', 'января');
    DEFINE('_FEBRUARY', 'февраля');
    DEFINE('_MARCH', 'марта');
    DEFINE('_APRIL', 'апреля');
    DEFINE('_MAY', 'мая');
    DEFINE('_JUNE', 'июня');
    DEFINE('_JULY', 'июля');
    DEFINE('_AUGUST', 'августа');
    DEFINE('_SEPTEMBER', 'сентября');
    DEFINE('_OCTOBER', 'октября');
    DEFINE('_NOVEMBER', 'ноября');
    DEFINE('_DECEMBER', 'декабря');
    /**
       * Локализация даты
       * @param mixed дата (в любом из понимаемых видов которые парсятся в ParseDate)
       * @param mixed формат даты если необходимо или нужно изменить
       * @return mixed
       */
      function dateformat($date, $dateformat=DATEFORMAT, $offset=OFFSET) {
        $this->parsedate($date, $offset);
        $result = null;
        $symbol = null;
        $match = null;
        $fullmonths = array(_JANUARY, _FEBRUARY, _MARCH, _APRIL, _MAY, _JUNE, _JULY, _AUGUST, _SEPTEMBER, _OCTOBER, _NOVEMBER, _DECEMBER);
        $shortmonths = array();
    //$shortmonths=array(_JAN,_FEB,_MAR,_APR,_MAY,_JUN,_JUL,_AUG,_SEP,_OCT,_NOV,_DEC);
        $fullweekdays = array(_SUNDAY, _MONDAY, _TUESDAY, _WEDNESDAY, _THURSDAY, _FRIDAY, _SATURDAY);
        $shortweekdays = array(_SUN, _MON, _TUE, _WED, _THU, _FRI, _SAT);
        for ($i = 0; $i < strlen($dateformat); $i++):
          $symbol = substr($dateformat, $i, 1);
          $match = null;
          switch ($symbol):
            case "d": //d День месяца, 2 цифры с ведущими нулями от 01 до 31
              $match = str_pad($date["D"], 2, "0", STR_PAD_LEFT);
              break;
            case "j": //j День месяца без ведущих нулей От 1 до 31
              $match = intVal($date["D"]);
              break;
            case "m": //m Порядковый номер месяца с ведущими нулями От 01 до 12
              $match = str_pad($date["M"], 2, "0", STR_PAD_LEFT);
              break;
            case "n": //n Порядковый номер месяца без ведущих нулей От 1 до 12
              $match = intVal($date["M"]);
              break;
            case "F": //F Полное наименование месяца, например January или March от January до December
              $match = str_pad($date["M"], 2, "0", STR_PAD_LEFT);
              if (intVal($date["M"]) > 0):
                $match = $fullmonths[intVal($date["M"]) - 1];
              endif;
              break;
            case "M": //M Сокращенное наименование месяца, 3 символа От Jan до Dec
              $match = str_pad($date["M"], 2, "0", STR_PAD_LEFT);
              if (intVal($date["M"]) > 0):
                $match = $shortmonths[intVal($date["M"]) - 1];
              endif;
              break;
            case "Y": //Y Порядковый номер года, 4 цифры Примеры: 1999, 2003
              $match = str_pad($date["Y"], 4, "0", STR_PAD_LEFT);
              break;
            case "y": //y Номер года, 2 цифры Примеры: 99, 03
              $match = substr($date["Y"], 2);
              break;
            case "H": //H Часы в 24-часовом формате с ведущими нулями От 00 до 23
              $match = str_pad($date["H"], 2, "0", STR_PAD_LEFT);
              break;
            case "h": //h Часы в 12-часовом формате с ведущими нулями От 01 до 12
              $match = str_pad($date["H"], 2, "0", STR_PAD_LEFT);
              if ($match > 12)
                $match = $match - 12;
              break;
            case "G": //G Часы в 24-часовом формате без ведущих нулей От 0 до 23
              $match = intVal($date["H"]);
              break;
            case "g": //g Часы в 12-часовом формате без ведущих нулей От 1 до 12
              $match = intVal($date["H"]);
              if ($match > 12):
                $match = $match - 12;
              endif;
              break;
            case "i": //i Минуты с ведущими нулями 00 to 59
              $match = str_pad($date["I"], 2, "0", STR_PAD_LEFT);
              break;
            case "s": //s Секунды с ведущими нулями От 00 до 59
              $match = str_pad($date["S"], 2, "0", STR_PAD_LEFT);
              break;
            case "w": //w Порядковый номер дня недели От 0 (Sunday) до 6 (Saturday)
              $match = date("w", $this->timestamp($date));
              break;
            case "l": //l (строчная 'L') Полное наименование дня недели От Sunday до Saturday
              $match = date("w", $this->timestamp($date));
              if (intVal($match) >= 0):
                $match = $fullweekdays[intVal($match)];
              endif;
              break;
            case "D": //D Сокращенное наименование дня недели, 3 символа от Mon до Sun
              $match = date("w", $this->timestamp($date));
              if (intVal($match) >= 0):
                $match = $shortweekdays[intVal($match)];
              endif;
              break;
            case "a": //a Ante meridiem или Post meridiem в нижнем регистре am или pm
            case "A": //A Ante meridiem или Post meridiem в верхнем регистре AM или PM
              $match = intVal($date["H"]);
              if ($match > 12):
                $match = ($match - 12) . " PM";
              else: $match .= " AM";
                if (substr($dateformat, $i, 1) == "a"):
                  $match = strToLower($match);
                endif;
              endif;
              break;
            case "U": //U Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT)
              $match = $this->timestamp($date);
              break;
            default: $match = substr($dateformat, $i, 1);
              break;
          endswitch;
          $result.=$match;
        endfor;
        unset($i);
        unset($match);
        unset($symbol);
        unset($fullmonths);
        unset($shortmonths);
        unset($fullweekdays);
        unset($shortweekdays);
        $date = $result;
        unset($result);
        return $date;
      }
      function date(&$date, $separator='-', $index=array('Y', 'M', 'D')) {
        $date = trim($date);
        $values = explode($separator, $date);
        $values[0] = intval($values[0]);
        $values[1] = intval($values[1]);
        $values[2] = intval($values[2]);
        $date = null;
        $date = array();
        if (PHP <= $this->compatibility):
          foreach ($values as $key => $value):
            $date[$index[$key]] = $values[$key];
          endforeach;
        else:
          $date = array_combine($index, $values);
        endif;
        return $date;
      }
      function time(&$time, $separator=':') {
        $hour = null;
        $min = null;
        $sec = null;
        $time = trim($time);
        list($hour, $min, $sec) = explode($separator, $time);
        $hour = intval($hour);
        $min = intval($min);
        $sec = intval($sec);
        $time = array('H' => $hour, 'I' => $min, 'S' => $sec);
        return $time;
      }
      function datetime(&$datetime) {
        $date = null;
        $time = null;
        list($date, $time) = explode(" ", $datetime);
        $this->date($date, '-', array('Y', 'M', 'D'));
        $this->time($time, ':');
        $datetime = array_merge($date, $time);
        return $datetime;
      }
      function timestamp(&$date) {
        if (!checkdate($date['M'], $date['D'], $date['Y'])):
          return false;
        endif;
        if ($date['H'] > 24 || $date['H'] < 0 || $date['I'] < 0 || $date['I'] > 59 || $date['S'] < 0 || $date['S'] > 59):
          return false;
        endif;
        $date = mktime($date['H'], $date['I'], $date['S'], $date['M'], $date['D'], $date['Y']);
        if ($date <= 0):
          return false;
        endif;
        return $date;
      }
      function parsedate(&$value, $offset=OFFSET) {
    //2009-05-20 13:10:55
        if (@preg_match('/\d{4}\-\d{2}\-\d{2}\s{1}\d{2}\:\d{2}\:\d{2}/', $value)):
          $this->datetime($value);
        endif;
    //2009-05-20
        if (@preg_match('/\d{4}\-\d{2}\-\d{2}/', $value)):
          $this->date($value, '-', array('Y', 'M', 'D'));
        endif;
    //20/05/2009
        if (@preg_match('/\d{2}\/\d{2}\/\d{4}/', $value)):
          $this->date($value, '/', array('M', 'D', 'Y'));
        endif;
    //20.05.2009
        if (@preg_match('/\d{2}\.\d{2}\.\d{4}/', $value)):
          $this->date($value, '.', array('D', 'M', 'Y'));
        endif;
    //20 05 2009
        if (@preg_match('/\d{2}\s{1}\d{2}\s{1}\d{4}/', $value)):
          $this->date($value, ' ', array('D', 'M', 'Y'));
        endif;
    //14:55:32
        if (@preg_match('/\d{2}\:\d{2}\:\d{2}/', $value)):
          $this->time($value, ':');
        endif;
    //09-05-20
        if (@preg_match('/\d{2}\-\d{2}\-\d{2}/', $value)):
          $this->date($value, '/', array('Y', 'M', 'D'));
        endif;
    //20/05/09
        if (@preg_match('/\d{2}\/\d{2}\/\d{2}/', $value)):
          $this->date($value, '/', array('M', 'D', 'Y'));
        endif;
    //20.05.09
        if (@preg_match('/\d{2}\.\d{2}\.\d{2}/', $value)):
          $this->date($value, '.', array('D', 'M', 'Y'));
        endif;
    //20 05 09
        if (@preg_match('/\d{2}\s{1}\d{2}\s{1}\d{2}/', $value)):
          $this->date($value, ' ', array('D', 'M', 'Y'));
        endif;
        if ($value['Y'] >= 40 && $value['Y'] <= 99):
          $value['Y'] = str_pad($value['Y'], 4, "19", STR_PAD_LEFT);
        endif;
        if ($value['Y'] < 40 && $value['Y'] >= 0):
          if (strlen($value['Y']) === 1):
            $value['Y'] = str_pad($value['Y'], 4, "200", STR_PAD_LEFT);
          elseif (strlen($value['Y']) === 2):
            $value['Y'] = str_pad($value['Y'], 4, "20", STR_PAD_LEFT);
          endif;
        endif;
        if (isset($offset) && $offset != 0):
          //                         mktime (                        $hour                  $min         $sec         $mon         $day         $year)
          $value = $this->parsedate(date('Y-m-d H:i:s', mktime($value['H'] + date('I') + $offset, $value['I'], $value['S'], $value['M'], $value['D'], $value['Y'])), 0);
        endif;
        if (!checkdate($value['M'], $value['D'], $value['Y'])):
          return null;
        endif;
        return $value;
      }
    
    //Пример
    
    
    $value1='20.05.2009'; // RUS Format 
    $value2='05/20/2009'; // ENG Format 
    $value3='2009-05-20 13:10:55'; // MySQL DateTime 
    $value4='2009-05-20'; // MySQL Date 
    $value4='13:10:55'; // MySQL Time 
    echo dateformat($value1,'j F Y'); 
    echo dateformat($value1,'d m Y H:i:s'); 
    echo dateformat($value1,'d.m.Y'); 
    echo dateformat($value1,'d F'); 
    
    echo dateformat($value2,'j F Y'); 
    echo dateformat($value2,'d m Y H:i:s'); 
    echo dateformat($value2,'d.m.Y'); 
    echo dateformat($value2,'d F'); 
    
    echo dateformat($value3,'j F Y'); 
    echo dateformat($value3,'d m Y H:i:s'); 
    echo dateformat($value3,'d.m.Y'); 
    echo dateformat($value3,'d F'); 
    
    echo dateformat($value4,'j F Y'); 
    echo dateformat($value4,'d m Y H:i:s'); 
    echo dateformat($value4,'d.m.Y'); 
    echo dateformat($value4,'d F'); 
    
    echo dateformat($value5,'H i'); 
    echo dateformat($value5,'H i s'); 
    echo dateformat($value5,'a i'); 
    echo dateformat($value5,'A i s'); 
    
    
    
    

    Фильтрование данных только функции
    закоментированы аналоги используемые для PHP 5.2 и выше
    Код:
    function string($var) {
        $this->result[$var] = (string) preg_replace('/[^\w\pL_-]/ui', '', $this->source[$var]);
        //$this->result[$var] = (string) filter_var($this->source[$var],FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_LOW);
      }
      function number($var) {
        $this->result[$var] = (int) preg_replace('/[^\d+]/ui', '', $this->source[$var]);
        //$this->result[$var] = (int) filter_var($this->source[$var],FILTER_SANITIZE_NUMBER_INT);
      }
      function email($var) {
        $this->result[$var] = (string) preg_replace('((?:\n|\r|\t|%0A|%0D|%08|%09)+)i', '', $this->source[$var]);
        //$this->result[$var] = (string) preg_replace('#[\x0-\x2C\x2F\x3A-\x3F\x5B-\x60\x7B-\xFF]#','',$this->source[$var]);
        //$this->result[$var] = (string) filter_var($this->source[$var],FILTER_SANITIZE_EMAIL);
      }
    
     
    3meyc и xriby нравится это.
  4. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    Перевод (склонение слов) коррекция языка

    варианты подачи переменных,
    я использую константы
    Код:
    DEFINE('_NEWS', "новоcть, новости, новостей");
    DEFINE('_RECORDING', "запись, записи, записей");
    DEFINE('_RESPONSE', "отзыв, отзыва, отзывов");
    DEFINE('_WORK', "работа, работы, работ");
    
    $years = array('год', 'года', 'лет');
    $months = array('месяц', 'месяца', 'месяцев');
    $days = array('день', 'дня', 'дней');
    

    Код:
      /**
       * Перевод (склонение слов)
       * @param array (массив из 3-х слов)
       * @param integer
       * @return string
       */
      function translator($array, $value) {
        settype($value, "integer");
        return $array[($value % 10 == 1 && $value % 100 != 11 ? 0 : ($value % 10 >= 2 && $value % 10 <= 4 && ($value % 100 < 10 || $value % 100 >= 20) ? 1 : 2))];
      }
    
    пример использования
    Код:
    для строк с разделителем ","
    $engine->translator(explode(",",_NEWS), $value) . ": " . $value;
    $engine->translator(array( "работа", "работы", "работ"), $value) . ": " . $value;
    
     
    Последнее редактирование: 8 авг 2014
    fortuner нравится это.
  5. CNiks0N

    CNiks0N lamp.root

    Регистр.:
    28 ноя 2008
    Сообщения:
    230
    Симпатии:
    48
    Мой велосипед - Класс ЧПУ.
    Вид good.id-5.html:
    params['id'] = 5;
    url_html::link = good

    Код:
    class url_html
    {
    	var $url;
    	var $link;
    	var $params;
    	var $path;
    	var $Ext = 'html';
    	function url_html() {
    		$this->url = eregi_replace('(\?)(.*)', null, GetEnv('REQUEST_URI'));
    		$tmp = explode('.', str_replace('.' . $this->Ext, null, $this->url), 2);
    		$this->link = substr($tmp[0], 1, strlen($tmp[0]) - 1);
    		foreach(explode('.', @$tmp[1]) as $pair) {
    			$p = explode('-', $pair, 2);
    			if(@trim($p[1]) || @trim($p[1]) == 0) $this->params[trim($p[0])] = @trim($p[1]);
    		}
    	}
    }
    Добавлено через 1 минуту
    Ещё один: Генератор паролей
    Код:
    function make_password($pass_len) 
    { 
      //seed the random generator 
        mt_srand( make_seed() ); 
      //create password 
        $password = ""; 
        for ($loop = 0; $loop < $pass_len; $loop++) 
        { 
            switch(mt_rand(0, 2))
            { 
                case 0: $password .= mt_rand(0, 9);            break; // Number (0-9) 
                case 1: $password .= chr(mt_rand(97, 122));    break; // Alpha Lower (a-z) 
                case 2: $password .= chr(mt_rand(65, 90));    break; // Alpha Upper (A-Z) 
            }
        }
      return $password;
    }
    
    Добавлено через 8 минут
    Создиние дерева каталогов:

    Код:
    function ms_forceDir($path) {
    	global $CFG;
    	$dd = explode('/', $path);
    	$p = ''; $r = false;
    	foreach ($dd as $d) {
    		$p .= $d . '/';
    		$r = @mkdir($p,0777);
    		if (strpos($CFG['path']['root'],$p)===false)
    		@chmod($p,0777);
    
    	}
    	return $r;
    } 
    
    Добавлено через 9 минут
    Класс сортировки в массиве:

    Код:
    class t_object_sorter
    {
       var $object_array;
       var $sort_by;
       var $sort_by_extra;
    
       function _comp($a,$b)
       {
           $key=$this->sort_by;
    	if (empty($sort_by_extra))
    	{
           	if ($this->object_array[$a][$key] == $this->object_array[$b][$key]) return 0;
    	       return ($this->object_array[$a][$key] < $this->object_array[$b][$key]) ? -1 : 1;
    	}
    	else
    	{
           	if ($this->object_array[$a][$key][$this->sort_by_extra] == $this->object_array[$b][$key][$this->sort_by_extra]) return 0;
    	       return ($this->object_array[$a][$key][$this->sort_by_extra] < $this->object_array[$b][$key][$this->sort_by_extra]) ? -1 : 1;
    	}
       }
    
       function _comp2($a,$b)
       {
           $key=$this->sort_by;
    	if (empty($sort_by_extra))
    	{
           	if ($this->object_array[$a][$key] == $this->object_array[$b][$key]) return 0;
    	       return ($this->object_array[$a][$key] < $this->object_array[$b][$key] || $this->object_array[$a]['cat_is_sponsor'] == 1) ? -1 : 1;
    	}
    	else
    	{
           	if ($this->object_array[$a][$key][$this->sort_by_extra] == $this->object_array[$b][$key][$this->sort_by_extra]) return 0;
    	       return ($this->object_array[$a][$key][$this->sort_by_extra] < $this->object_array[$b][$key][$this->sort_by_extra]) ? -1 : 1;
    	}
       }
    
       function _comp_desc($a,$b)
       {
           $key=$this->sort_by;
    	if (empty($sort_by_extra))
    	{
           	if ($this->object_array[$a][$key] == $this->object_array[$b][$key]) return 0;
    	       return ($this->object_array[$a][$key] > $this->object_array[$b][$key]) ? -1 : 1;
    	}
    	else
    	{
           	if ($this->object_array[$a][$key][$this->sort_by_extra] == $this->object_array[$b][$key][$this->sort_by_extra]) return 0;
    	       return ($this->object_array[$a][$key][$this->sort_by_extra] > $this->object_array[$b][$key][$this->sort_by_extra]) ? -1 : 1;
    	}
       }
    
       function _comp_desc2($a,$b)
       {
           $key=$this->sort_by;
    	if (empty($sort_by_extra))
    	{
           	if ($this->object_array[$a][$key] == $this->object_array[$b][$key] && $this->object_array[$a][$key] == 1)
    		{
    		       return (($this->object_array[$a][$key]*(100000-$this->object_array[$a]['order'])) > ($this->object_array[$b][$key]*(100000-$this->object_array[$b]['order']))) ? -1 : 1;
    		}
           	else if ($this->object_array[$a][$key] == $this->object_array[$b][$key] && $this->object_array[$a][$key] == 0)
    		{
     	      		if ($this->object_array[$a]['fullname_trans'] == $this->object_array[$b]['fullname_trans']) return 0;
    		       return ($this->object_array[$a]['fullname_trans'] < $this->object_array[$b]['fullname_trans']) ? -1 : 1;
    		}
    	       return (($this->object_array[$a][$key]*(100000-$this->object_array[$a]['order'])) > ($this->object_array[$b][$key]*(100000-$this->object_array[$b]['order']))) ? -1 : 1;
    	}
    	else
    	{
           	if ($this->object_array[$a][$key][$this->sort_by_extra] == $this->object_array[$b][$key][$this->sort_by_extra]) return 0;
    	       return ($this->object_array[$a][$key][$this->sort_by_extra] > $this->object_array[$b][$key][$this->sort_by_extra]) ? -1 : 1;
    	}
       }
    
       function sort(&$object_array, $sort_by, $sort_type = "ASC", $sort_by_extra = "")
       {
           $this->object_array  = $object_array;
           $this->sort_by       = $sort_by;
           $this->sort_by_extra = $sort_by_extra;
    	if (!empty($object_array))
    	{
    	       if ($sort_type == "DESC")
           	{
    	           uksort($object_array, array($this, "_comp_desc"));
           	}
    	       else
           	{
    	           uksort($object_array, array($this, "_comp"));
           	}
    	}
       }
    
       function sortCatalog(&$object_array, $sort_by, $sort_type = "ASC", $sort_by_extra = "")
       {
           $this->object_array  = $object_array;
           $this->sort_by       = $sort_by;
           $this->sort_by_extra = $sort_by_extra;
    	if (!empty($object_array))
    	{
    	       if ($sort_type == "DESC")
           	{
    	           uksort($object_array, array($this, "_comp_desc2"));
           	}
    	       else
           	{
    	           uksort($object_array, array($this, "_comp2"));
           	}
    	}
       }
    
    }
    
    Добавлено через 10 минут
    Удаляем из текста всякое г

    Код:
    function html2txt($document)
    {
    	$document = preg_replace('/<br.*?>/is',"\n",$document);
    	$search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript
    	               '@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags
           	        '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
                  	 '@<![\s\S]*?--[ \t\n\r]*>@'        // Strip multi-line comments including CDATA
    			);
    	$text = preg_replace($search, '', $document);
    	return $text;
    }
    
     
  6. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Правильные окончания на все случаи жизни.
    PHP:
    function true_end($chislo,$n1,$n2,$n5){
        
    $chislo=(int)$chislo;  
        
    $ch=substr($chislo,-1);  
        if (
    $ch==1){  
            if (
    strlen($chislo)>1$result=substr($chislo,-2,1)==1?$n5:$n1;  
            else 
    $result=$n1;  
        }else if(
    $ch>1&&$ch<5){  
            if (
    strlen($chislo)>1$result=substr($chislo,-2,1)==1?$n5:$n2;  
            else 
    $result=$n2;  
        }else{  
            
    $result=$n5;  
        }  
        return 
    $result;  
    }   
    echo 
    "У вас " true_end($num'покупка','покупки','покупок');
    echo 
    "На сумму " true_end($rur'рубль','рубля','рублей');
    echo 
    "По курсу " true_end($hvn'гривна','гривны','гривен');

    echo 
    "Вы Онлайн уже" true_end($hr 'час','часа','часов');
    echo 
    true_end($min 'минуту','минуты','минут');
     
    davyduck, fortuner и 3meyc нравится это.
  7. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    venetu у меня тоже самое (чуть выше), только реализация другая)


    Удаляет экранирующие бэкслэши в массиве и строках
    Код:
    /**
    * Удаляет экранирующие бэкслэши в массиве
    * @param array $array
    * @return array $array
    */
      function stripslash(&$array) {
        if (is_array($array)):
          reset($array);
          foreach ($array as $key => $value):
            if (is_array($array[$key])):
              $this->stripslash($array[$key]);
            else:
              $array[$key] = stripslashes($value);
            endif;
          endforeach;
        else:
          $array = stripslashes($array);
        endif;
        return $array;
      }
    

    самая страшная функция получения IP =)
    Код:
      /**
       * IP адрес текущего пользователя
       * @return  mixed IP адрес XXX.XXX.XXX.XXX или false если не определен
       */
      function ip() {
        global $REMOTE_ADDR;
        global $HTTP_CLIENT_IP;
        global $HTTP_X_REAL_IP, $HTTP_X_FORWARDED_FOR, $HTTP_X_FORWARDED, $HTTP_FORWARDED_FOR, $HTTP_FORWARDED;
        global $HTTP_VIA, $HTTP_X_COMING_FROM, $HTTP_COMING_FROM;
        $ip = null;
        if (empty($REMOTE_ADDR)):
          if (!empty($_SERVER) && isset($_SERVER['REMOTE_ADDR'])): $REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
          elseif (!empty($_ENV) && isset($_ENV['REMOTE_ADDR'])): $REMOTE_ADDR = $_ENV['REMOTE_ADDR'];
          elseif (@getenv('REMOTE_ADDR')): $REMOTE_ADDR = getenv('REMOTE_ADDR');
          endif;
        endif;
        if (empty($HTTP_CLIENT_IP)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_CLIENT_IP'])): $REMOTE_ADDR = $_SERVER['HTTP_CLIENT_IP'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_CLIENT_IP'])): $REMOTE_ADDR = $_ENV['HTTP_CLIENT_IP'];
          elseif (@getenv('HTTP_CLIENT_IP')): $HTTP_CLIENT_IP = getenv('HTTP_CLIENT_IP');
          endif;
        endif;
        if (empty($HTTP_X_REAL_IP)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_X_REAL_IP'])): $HTTP_X_REAL_IP = $_SERVER['HTTP_X_REAL_IP'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_X_REAL_IP'])): $HTTP_X_REAL_IP = $_ENV['HTTP_X_REAL_IP'];
          elseif (@getenv('HTTP_X_REAL_IP')): $HTTP_X_REAL_IP = getenv('HTTP_X_REAL_IP');
          endif;
        endif;
        if (empty($HTTP_X_FORWARDED_FOR)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED_FOR'])): $HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED_FOR'])): $HTTP_X_FORWARDED_FOR = $_ENV['HTTP_X_FORWARDED_FOR'];
          elseif (@getenv('HTTP_X_FORWARDED_FOR')): $HTTP_X_FORWARDED_FOR = getenv('HTTP_X_FORWARDED_FOR');
          endif;
        endif;
        if (empty($HTTP_X_FORWARDED)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED'])): $HTTP_X_FORWARDED = $_SERVER['HTTP_X_FORWARDED'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED'])): $HTTP_X_FORWARDED = $_ENV['HTTP_X_FORWARDED'];
          elseif (@getenv('HTTP_X_FORWARDED')): $HTTP_X_FORWARDED = getenv('HTTP_X_FORWARDED');
          endif;
        endif;
        if (empty($HTTP_FORWARDED_FOR)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED_FOR'])): $HTTP_FORWARDED_FOR = $_SERVER['HTTP_FORWARDED_FOR'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_FORWARDED_FOR'])): $HTTP_FORWARDED_FOR = $_ENV['HTTP_FORWARDED_FOR'];
          elseif (@getenv('HTTP_FORWARDED_FOR')): $HTTP_FORWARDED_FOR = getenv('HTTP_FORWARDED_FOR');
          endif;
        endif;
        if (empty($HTTP_FORWARDED)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED'])): $HTTP_FORWARDED = $_SERVER['HTTP_FORWARDED'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_FORWARDED'])): $HTTP_FORWARDED = $_ENV['HTTP_FORWARDED'];
          elseif (@getenv('HTTP_FORWARDED')): $HTTP_FORWARDED = getenv('HTTP_FORWARDED');
          endif;
        endif;
        if (empty($HTTP_VIA)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_VIA'])): $HTTP_VIA = $_SERVER['HTTP_VIA'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_VIA'])): $HTTP_VIA = $_ENV['HTTP_VIA'];
          elseif (@getenv('HTTP_VIA')): $HTTP_VIA = getenv('HTTP_VIA');
          endif;
        endif;
        if (empty($HTTP_X_COMING_FROM)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_X_COMING_FROM'])): $HTTP_X_COMING_FROM = $_SERVER['HTTP_X_COMING_FROM'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_X_COMING_FROM'])): $HTTP_X_COMING_FROM = $_ENV['HTTP_X_COMING_FROM'];
          elseif (@getenv('HTTP_X_COMING_FROM')): $HTTP_X_COMING_FROM = getenv('HTTP_X_COMING_FROM');
          endif;
        endif;
        if (empty($HTTP_COMING_FROM)):
          if (!empty($_SERVER) && isset($_SERVER['HTTP_COMING_FROM'])): $HTTP_COMING_FROM = $_SERVER['HTTP_COMING_FROM'];
          elseif (!empty($_ENV) && isset($_ENV['HTTP_COMING_FROM'])): $HTTP_COMING_FROM = $_ENV['HTTP_COMING_FROM'];
          elseif (@getenv('HTTP_COMING_FROM')): $HTTP_COMING_FROM = getenv('HTTP_COMING_FROM');
          endif;
        endif;
        if (!empty($REMOTE_ADDR)): $ip = $REMOTE_ADDR;
        endif;
        if (!empty($HTTP_CLIENT_IP)): $ip = $HTTP_CLIENT_IP;
        endif;
        $proxy = null;
        if (!empty($HTTP_X_REAL_IP)): $proxy = $HTTP_X_REAL_IP;
        elseif (!empty($HTTP_X_FORWARDED_FOR) && (strtolower($HTTP_X_FORWARDED_FOR) != 'unknown' && strtolower($HTTP_X_FORWARDED_FOR) != 'undefine' && $HTTP_X_FORWARDED_FOR != 'undefine')): $proxy = $HTTP_X_FORWARDED_FOR;
        elseif (!empty($HTTP_X_FORWARDED)): $proxy = $HTTP_X_FORWARDED;
        elseif (!empty($HTTP_FORWARDED_FOR)): $proxy = $HTTP_FORWARDED_FOR;
        elseif (!empty($HTTP_FORWARDED)): $proxy = $HTTP_FORWARDED;
        elseif (!empty($HTTP_VIA)): $proxy = $HTTP_VIA;
        elseif (!empty($HTTP_X_COMING_FROM)): $proxy = $HTTP_X_COMING_FROM;
        elseif (!empty($HTTP_COMING_FROM)): $proxy = $HTTP_COMING_FROM;
        endif;
        if (empty($proxy)): return $ip;
        else: $is_ip = preg_match('|^([0-9]{1,3}\.){3,3}[0-9]{1,3}|', $proxy, $regs);
          if ($is_ip && (count($regs) > 0)): return $regs[0];
          endif;
        endif;
        return false;
      }
    
    IP Фильтр
    функция IP выше ))
    Код:
      /**
       * Фильтраця IP адресов
       * @param array Диапазоны фильтрации array ('192.168.0.*','192.168.1.1','192.168.100.200','192.*.*.12')
       * @return boolean
       */
      function ip_filter($ip_array) {
    
        global $engine;
        $ip = $this->ip();
        if (count($ip_array) == 0):
          return false;
        else:
          foreach ($ip_array as $key => $string):
            $ban = '/^' . str_replace('*', '(\d*)', str_replace('.', '\\.', $engine->string->trim($string))) . '$/';
            if (preg_match($ban, $ip)):
              return true;
            endif;
          endforeach;
        endif;
        return false;
      }
    
     
  8. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    Данная функция полезна при том если вы любите использовать массивы
    пример есть форма с полями uname,uage,uloc
    форма отплавлена и мы получи из нее данные так
    PHP:
    $data_post_form=array('uname'=>'','uage'=>'','uloc'=>'');
    post($data_post_form);
    и результат
    ДОПУСТИМ
    PHP:
    array(
    'uname'=>'Вася',
    'uage'=>'19',
    'uloc'=>'Дома');
    Код:
     /**
       * Изъятие переменной из массива POST при register_globals = Off & safe_mode = On
       * @param string имя переменной
       * @return mixed
       */
      function post(&$var=null, $free=true) {
        if (is_array($var)):
          foreach ($var as $column => $value):
            isset($_POST[$column]) ? $var[$column] = $_POST[$column] : $var[$column] = null;
          endforeach;
          unset($column);
          unset($value);
        else:
          isset($_POST[$var]) ? $var = $_POST[$var] : $var = null;
        endif;
        if ($free):
          unset($_POST);
        endif;
        return $var;
      }
    
    
     
    3meyc нравится это.
  9. Mxnrl

    Mxnrl Постоялец

    Заблокирован
    Регистр.:
    29 апр 2010
    Сообщения:
    50
    Симпатии:
    1
    Проверка валидности e-mail'а для php > 5.2 :
    PHP:
    <?php
    filter_var
    ($mailFILTER_VALIDATE_EMAIL);

    Несколько полезный функций

    PHP:
    <?php
    //получаем ip пользователя
    public function GetRealIp() {
            if (!empty(
    $_SERVER['HTTP_CLIENT_IP'])) {
                return 
    $_SERVER['HTTP_CLIENT_IP'];
            } elseif (!empty(
    $_SERVER['HTTP_X_FORWARDED_FOR'])) {
                return 
    $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
                return 
    $_SERVER['REMOTE_ADDR'];
            }
        }

    //приводим дату к виду 1.2.2010
        
    public function strip_zeros_from_date($marked_string="") {
            
            
    $no_zeros str_replace('*0'''$marked_string);
            
    $cleaned_string str_replace('*'''$no_zeros);
            return 
    $cleaned_string;
        }

    //редирект
        
    public function redirect_to($location NULL) {
            if (
    $location != NULL) {
                
    header("Location: {$location}");
                exit;
            }
        }

    //алерт
        
    public function alert($text) {
            echo 
    "<script type=\"text/javascript\">
                    alert(\"
    {$text}\");
                </script>"
    ;
        }


    //вывод даты на человеческом языке
        
    public function MyDate($date) {

            
    $mounthnum substr($date52);

            switch (
    $mounthnum) {

                case 
    '01'$mounth "Января";
                    break;

                case 
    '02'$mounth "Февраля";
                    break;

                case 
    '03'$mounth "Марта";
                    break;

                case 
    '04'$mounth "Апреля";
                    break;

                case 
    '05'$mounth "Мая";
                    break;

                case 
    '06'$mounth "Июня";
                    break;

                case 
    '07'$mounth "Июля";
                    break;

                case 
    '08'$mounth "Августа";
                    break;

                case 
    '09'$mounth "Сертября";
                    break;

                case 
    '10'$mounth "Октября";
                    break;

                case 
    '11'$mounth "Ноября";
                    break;

                case 
    '12'$mounth "Декабря";
                    break;
            }



            
    $day substr($date82);

            
    $time substr($date115);

            
    $year substr($date04);



            
    $rest $day ' ' $mounth ' ' $year ' в ' $time;



            return 
    $rest;
        }
     
  10. dexgun

    dexgun Постоялец

    Заблокирован
    Регистр.:
    26 сен 2010
    Сообщения:
    63
    Симпатии:
    19
    Как то столкнулся с проблемой полного переворачивания ключей и одновременно значений массива ,стандартной функции не нашлось вот мой велосипедик -

    PHP:
    <?php
    // сюда пишим массив значения и ключи которого нужно перевернуть
    $a = array(5,7,3,8,14,16);

    //Функция которая будет принимать массив и возвращать его полностью в перевернутом ввиде
    function allReverse(&$array){
    $arrayReturn = array();
    $value end($array);
    $end array_flip($array);
    $key end($end);
    do
    {
    $arrayReturn[$key]= $value;   
    }
    while(
    $valueprev($array) and $key prev($end));
    $valuereset($array); $key reset($end);
    $arrayReturn[$key]= $value

    return 
    $arrayReturn;
    }

    //Шлем массив в функцию переворачивания
    $reverseA allReverse($a);

    //Выводим уже перевернутый массив
    echo "<pre>";
    print_r($reverseA);
    echo 
    "</pre>";
    ?>