Вы не зашли.
Главная » PHP » Корзина функций.
#1. TLENS Off (14)
Moderator
2011.11.23 17:05
Предлагаю здесь собирать всякие полезные функции.
Есть много функций которые писал и после ненадобности просто удалял или терял.
#2. POFIGISST Off (6)
Участник
2011.11.23 17:05
Полезная тема,а эксклюзивные скрипты сюда можно выкладывать?)
#3. TLENS Off (14)
Moderator
2011.11.23 17:05
Ну и пару свежо-написанных.
Вчера полазил по гуглу, не нашел функции для преобразования с двоичной системы в десятичную и наоборот.
Вот решил написать. Плюс моя функция вычитания числа в степень используя рекурсию.
Если есть погрешности прошу кинуть в меня камнем.
Код:
span style="color: #0000BB"><?php/** * @autor TLENS * @return int * @description "вычитания числа в степень"**/function power ($b, $n, $t = 1) { if($n > 0) return power($b, --$n, $t * $b); return $t;}/** * @autor TLENS * @return int * @description "перевод с двоичного исчисления в десятичное"**/function bin_to_dec($a) { $r = 0; $a = (string)$a; $c = strlen($a) - 1; for ($i = 0; $c >= 0; $c --) $r += (($a[$i++]) ? 1 : 0) * 2 << ($i - 1); return $r;}/** * @autor TLENS * @return string * @description "перевод с десятичного исчисления в двоичное"**/function dec_to_bin($int) { $r = ''; do { $r = $r . $int % 2; } while (($int >>= 1) >= 1); return $r;}$i = 101;echo $i . '&nbsp;' . bin_to_dec($i) . '<br />'; // 101 5
#4. Gemorroj Off (107)
Administrator
2011.11.23 21:09
Код:
<xsl:template name="split">
<xsl:param name="value"/>
<xsl:param name="index" select="1"/>
<xsl:param name="maxLen" select="512"/>
<xsl:param name="maxNodes" select="5"/>
<xsl:if test="string-length($value) &gt; 0 and $index &lt;= $maxNodes">
<E4440>
<xsl:value-of select="substring($value, 1, $maxLen)"/>
</E4440>
<xsl:call-template name="split">
<xsl:with-param name="value" select="substring($value, $maxLen)"/>
<xsl:with-param name="index" select="$index + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
)))
#5. tipsun Off (19)
Moderator
2011.11.23 21:09
TLENS, я извиняюсь, а стандартной функцией pow(), для возведения числа в степень, почему не воспользовался?
Или я не понял сути.

Код:
span style="color: #0000BB"><?php/** * @autor TLENS * @return int * @description "вычитания числа в степень"**/function power ($b, $n, $t = 1) { if($n > 0) return power($b, --$n, $t * $b); return $t;}?>
Отредактировано tipsun (2011.11.23 21:09)
#6. TLENS Off (14)
Moderator
2011.11.23 21:09
Ну это мое домашнее задание на Си. Просто интересный пример, можно взять как шаблон для вычета платежей по кредиту.
#7. tipsun Off (19)
Moderator
2011.11.23 21:09
TLENS, а вообще умно придуманно smile
Рекурсивно вызывается до тех пор, пока n не нарушит условие.
#8. TLENS Off (14)
Moderator
2011.11.23 22:10
Gemorroj Что это? Я в xsl еще не влазил.
#9. Gemorroj Off (107)
Administrator
2011.11.23 22:10
TLENS, что-то вроде str_split
#10. TLENS Off (14)
Moderator
2011.11.24 03:03
tipsun пытаюсь толком вникнуть в биты (рою всевозможные статьи по поводу). Смотри замену.
Код:
span style="color: #0000BB"><?phpfunction power ($b, $n) { return $b << ($n - 1);}
Считаю это самая быстрая функция так как просто происходит сдвиг бита.
for ($i = 0; $i < 10; $i ++)
    power (1272, 73739);
Разница 0.3536 и 0.0001
#11. tipsun Off (19)
Moderator
2011.11.24 10:10
ppc smile
Как за комп сяду посмотрю чеэта.
#12. DarkRiDDeR Off (4)
Участник
2011.11.24 14:02
Код:
span style="color: #0000BB"><?php//Функция "Удаления каталога с файлами" function delete_dir($dir){ if($scandir = scandir($dir = $dir . '/')){$x = 0; foreach($scandir as $value){ if($x > 1){$value = $dir . $value;if(is_dir($value)) delete_dir($value);else unlink($value); }++$x; } }return rmdir($dir); }
?>
Добавлено спустя   3 минуты  41 секунду:
Код:
span style="color: #0000BB"><?php/*Функция SpiderDetect - принимает $_SERVER['HTTP_USER_AGENT'] и возвращает имя кравлера поисковой системы или false.*//*База ботов - http://www.user-agents.org/Кому охото могут всех записать, но это уже будет наверно перебор :)*/ function SpiderDetect($USER_AGENT){$engines = array(array('Aport', 'Aport robot'),array('Google', 'Google'),array('msnbot', 'MSN'),array('Rambler', 'Rambler'),array('Yahoo', 'Yahoo'),array('AbachoBOT', 'AbachoBOT'),array('accoona', 'Accoona'),array('AcoiRobot', 'AcoiRobot'),array('ASPSeek', 'ASPSeek'),array('CrocCrawler', 'CrocCrawler'),array('Dumbot', 'Dumbot'),array('FAST-WebCrawler', 'FAST-WebCrawler'),array('GeonaBot', 'GeonaBot'),array('Gigabot', 'Gigabot'),array('Lycos', 'Lycos spider'),array('MSRBOT', 'MSRBOT'),array('Scooter', 'Altavista robot'),array('AltaVista', 'Altavista robot'),array('WebAlta', 'WebAlta'),array('IDBot', 'ID-Search Bot'),array('eStyle', 'eStyle Bot'),array('Mail.Ru', 'Mail.Ru Bot'),array('Scrubby', 'Scrubby robot'),array('Yandex', 'Yandex'),array('YaDirectBot', 'Yandex Direct')); foreach ($engines as $engine){if(strpos($USER_AGENT, $engine[0]) !== false) return($engine[1]); }return (false); }?>
Отредактировано DarkRiDDeR (2011.11.24 14:02)
#13. tipsun Off (19)
Moderator
2011.11.24 19:07
TLENS написал:
tipsun пытаюсь толком вникнуть в биты (рою всевозможные статьи по поводу). Смотри замену.
Код:
span style="color: #0000BB"><?phpfunction power ($b, $n) { return $b << ($n - 1);}
Считаю это самая быстрая функция так как просто происходит сдвиг бита.
for ($i = 0; $i < 10; $i ++)
    power (1272, 73739);
Разница 0.3536 и 0.0001
Она у тебя в степень возводит или что?
#14. TLENS Off (14)
Moderator
2011.11.24 19:07
Ну да!
Добавлено спустя   1 минуту  34 секунды:
добавить один ноль с права в двоичной системе тоже самое что перемножить число на 2 (два нуля на четыре).
#15. tipsun Off (19)
Moderator
2011.11.24 19:07
Код:
span style="color: #0000BB"><?phpfunction power($b, $n) { return $b << ($n - 1); }echo power(5, 3);//20//а должно 125 = 5*5*5?>
#16. TLENS Off (14)
Moderator
2011.11.24 19:07
Сейчас проветю в чем дело
#17. tipsun Off (19)
Moderator
2011.11.24 19:07
Ок.
#18. TLENS Off (14)
Moderator
2011.11.24 19:07
Тьфу блин. Надо хоть иногда ложится поспать. Чета затупил. A <<= N ровняется A * 2 в N степени.
Ну собственно то что и надо было в функции переведения типов. А тестировал на двойке. Что и дало мне нужный результат.
#19. tipsun Off (19)
Moderator
2011.11.24 19:07
TLENS, ниче не понял smile

Код:
span style="color: #0000BB"><?phpecho '<pre>';echo 2 ^ 1; echo PHP_EOL; //3 bitsecho 25 ^ 5; echo PHP_EOL; //28 bitsecho 125 ^ 5; echo PHP_EOL; //120 bitsecho 125 ^ 25; echo PHP_EOL; //100 bitsecho '</pre>';/*The above example will output: --------- --------- -- --------- result value op test --------- --------- -- --------- Bitwise AND( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101) Bitwise Inclusive OR( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)(13 = 1101) = ( 8 = 1000) | ( 5 = 0101) Bitwise Exclusive OR (XOR)( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)*/?>
Отредактировано tipsun (2011.11.24 20:08)
#20. TLENS Off (14)
Moderator
2011.11.26 20:08
Brian W. Kernighan, Dennis M. Ritchie
Упражнение 3.3. Напишите функцию expand(s1,s2), заменяющую сокращенную запись наподобие a-z в строке s1 эквивалентной полной записью аbс...хуz в s2. В s1 допускаются буквы (прописные и строчные) и цифры. Следует уметь справляться с такими случаями, как a-b-c, a-z0-9 и -a-b. Считайте знак - в начале или в конце s1 обычным символом минус.
Код:
//C
#include <stdio.h>
#define EOF '\n'
#define MAXLENGTH 1000
void expand(int a[], int b[]);
 
int main ()
{
int a[MAXLENGTH], b[MAXLENGTH], c, i;
for (i = 0; i < MAXLENGTH; i++)
a[i] = b[i] = '\0';
while (1)
{
printf("In: ");
for (i = 0; (c = getchar()) != EOF; i ++)
if (i < MAXLENGTH) a[i] = c;
if (++i < MAXLENGTH) a[i] = '\0';
expand(a, b);
for (i = 0; i < MAXLENGTH && b[i] != '\0'; i++)
putchar(b[i]);
putchar('\n');
for (i = 0; i < MAXLENGTH; i++)
a[i] = b[i] = '\0';
}
 
getchar();
}
void expand (int a[], int b[])
{
int i, j;
for (i = j = 0; i < MAXLENGTH && a[i] != EOF && a[i] != '\0'; i ++, j)
{
if (b[j] != '\0' || j > MAXLENGTH) break;
if (a[i] == '-')
{
if (((a[i - 1] >= 'a' && a[i - 1] <= 'z') && (a[i + 1] >= 'a' && a[i + 1] <= 'z')) || ((a[i - 1] >= 'A' && a[i - 1] <= 'Z') && (a[i + 1] >= 'A' && a[i + 1] <= 'Z')))
{
if (a[i+1] > a[i-1])
for (int l = a[i-1] + 1; l < a[i+1]; l++)
{
if (b[j] != '\0' || j > MAXLENGTH) break;
b[j++] = l;
}
else b[j++] = '-';
}
else if ((a[i - 1] >= 'a' && a[i - 1] <= 'z') && (a[i + 1] >= 'A' && a[i + 1] <= 'Z'))
{
for (int l = a[i-1] + 1; l != a[i+1]; l++)
{
if (b[j] != '\0' || j > MAXLENGTH) break;
b[j++] = l;
if (l == 'z')
l = 'A' - 1;
}
 
}
else if (a[i-1] >= '0' && a[i+1] <='9')
{
if (a[i+1] > a[i-1])
for (int l = a[i-1] + 1; l < a[i+1]; l++)
{
if (b[j] != '\0' || j > MAXLENGTH) break;
b[j++] = l;
}
else b[j++] = '-';
}
else
b[j++] = '-';
 
}
else
b[j++] = a[i];
}
b[j++] = '\0';
return;
}
ps. Бонус справляется с такой записью как a-Z
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.020 s