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

Статус
В этой теме нельзя размещать новые ответы.

t3s

Мой дом здесь!
Регистрация
16 Фев 2008
Сообщения
708
Реакции
285
Ниже представлены готовые кусочки кода, т.н. "велосипеды"... для того, чтобы новички не пытались изобретать велосипед заново (хотя иногда это бывает полезно)

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

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 >= 2 || $a <= 4) $str="я";
else $str="ей";
return $str;
}


Выводим так:
PHP:
$users=24; //получаем количество
echo $users."&nbsp;юзвер".ends($users); //выводим с правильным окончанием

зы
данный топик будет периодически дополняться... а если у вас есть свои "велосипеды", не стесняйтесь выкладывать
ззы
обратите внимание на слово свои в предыдущей фразе
не нужно копипастить примеры с пхп.нет или аналогичных ресурсов - подобные примеры будут удаляться, а по отношению к копипастерам будут приняты меры
 
С окончаниями не все так просто. Нумеруются не только дни, но и,например, недели (ж.р., окончание - гласн.), месяцы (м.р. оканч. на согл.)....
В общем в Великом и Могучем есть 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;
  }
 
мои колеса от велосипеда )
Сравнивание строк, учетом регистра или без него
Код:
/**
   * Сравнивание строк, учетом регистра или без него
   * @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);
  }
 
Перевод (склонение слов) коррекция языка

варианты подачи переменных,
я использую константы
Код:
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;
 
Последнее редактирование:
Мой велосипед - Класс ЧПУ.
Вид 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;
}
 
Правильные окончания на все случаи жизни.
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 'минуту','минуты','минут');
 
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;
  }
 
Данная функция полезна при том если вы любите использовать массивы
пример есть форма с полями 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;
  }
 
  • Заблокирован
  • #9
Проверка валидности e-mail'а для php > 5.2 :
PHP:
<?php
filter_var($mail, FILTER_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($date, 5, 2);

        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($date, 8, 2);

        $time = substr($date, 11, 5);

        $year = substr($date, 0, 4);



        $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($value= prev($array) and $key = prev($end));
$value= reset($array); $key = reset($end);
$arrayReturn[$key]= $value; 

return $arrayReturn;
}

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

//Выводим уже перевернутый массив
echo "<pre>";
print_r($reverseA);
echo "</pre>";
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху