1. Начата процедура восстановления социальных групп. Лидерам старых и новых групп обязательно ознакомиться с регламентом проведения работ.

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

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

  1. TopicStarter Overlay

    t3s

    Moderator
    Ниже представлены готовые кусочки кода, т.н. "велосипеды"... для того, чтобы новички не пытались изобретать велосипед заново (хотя иногда это бывает полезно)

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

    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); //выводим с правильным окончанием
    зы
    данный топик будет периодически дополняться... а если у вас есть свои "велосипеды", не стесняйтесь выкладывать
    ззы
    набор постов в данной теме = бан на 365 дней
    SanGreel и 3meyc нравится это.
  2. С окончаниями не все так просто. Нумеруются не только дни, но и,например, недели (ж.р., окончание - гласн.), месяцы (м.р. оканч. на согл.)....
    В общем в Великом и Могучем есть 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;
      }
    3meyc нравится это.
  3. CrashX В прошлом XSiteCMS

    мои колеса от велосипеда )
    Сравнивание строк, учетом регистра или без него
    Код:
    /**
       * Сравнивание строк, учетом регистра или без него
       * @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 В прошлом XSiteCMS

    Мульти названия и коррекция языка

    варианты подачи переменных,
    я использую константы
    Код:
    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;
    
  5. Мой велосипед - Класс ЧПУ.
    Вид 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. Правильные окончания на все случаи жизни.
    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 'минуту','минуты','минут');
    3meyc нравится это.
  7. CrashX В прошлом XSiteCMS

    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 В прошлом XSiteCMS

    Данная функция полезна при том если вы любите использовать массивы
    пример есть форма с полями 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. Проверка валидности 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. Как то столкнулся с проблемой полного переворачивания ключей и одновременно значений массива ,стандартной функции не нашлось вот мой велосипедик -

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