- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
<?php
/*
desc:
Инкремент строки типа '000'
Символы от '0' до 'z'
*/
function levelIncrease($lvl)
{
for($i = 2, $ng = 0; $i >= 0; $i--) {
$g = ord($lvl[$i]);
if($i == 2)
++$g;
$g += $ng;
$ng = 0;
if($g > 57 && $g < 97)
$g = 97;
else if($g > 122) {
$diff = $g - 122;
$g = 48 + $diff - 1;
$ng = ceil($diff / 36);
}
$lvl[$i] = chr($g);
if($ng == 0)
break;
}
return $lvl;
}
echo levelIncrease('aaa'); // aab
guest 17.02.2009 17:37 # 0
guest 17.02.2009 19:41 # 0
Вот типа нормальный вариант:
function increaseCommentLevel($level)
{
if(strlen($level) % 3 != 0)
throw new Exception('ERROR: Comment level is corrupted');
$scale = array(
'0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r', 's','t','u','v','w','x','y','z'
);
$increment = 1; // size of the increment
$scSize = count($scale);
$res = '';
$nGrade = 0;
for($i = strlen($level) - 1, $fst = 1; $i >= 0; $i--)
{
$dg = array_search($level[$i], $scale);
if($fst) { $dg += $increment; $fst = 0; }
$dg += $nGrade;
$nGrade = floor($dg / $scSize);
$dg = ($dg - $scSize * $nGrade);
$res = $scale[$dg] . $res;
}
return $res;
}
guest 17.02.2009 20:08 # 0
lvl = ['0'..'9'] ++ ['a'..'z']
lvls = sequence $ replicate 3 lvl
getNext e = maybe "000" ((lvls !!).(+1)) $ elemIndex e lvls
guest 17.02.2009 20:12 # 0
Точнее
getNext e = maybe "000" ((lvls !!).(`mod` (length lvls)).(+1)) $ elemIndex e lvls
guest 17.02.2009 20:21 # 0
хуясе здесь математики собрались о_О
Обязательно этот беcпредел с флурами, цейлами и тонной умножений? Первый код нихуя не понятен, но в втором каменте ваще какая то высшая математика..
guest 17.02.2009 20:23 # 0
ща я тоже загоню, падаждите :D
guest 17.02.2009 20:28 # 0
guest 17.02.2009 23:00 # 0
Долбаебы
guest 18.02.2009 02:16 # 0
Рыдаю. Радует что я не один такой :)
guest 18.02.2009 09:59 # 0
lvls = sequence $ replicate 3 lvl
что это???
guest 18.02.2009 10:59 # 0
Капитан Очевидность, а у тебя бестолковка работает, молодец!
Как в басне: ".. а ларчик просто открывался".
В итоге решение такое:
$str = '001';
$str = sprintf('%03s', ++$str);
echo $str;
Индуский бог кодинга седня отдыхает :)))
guest 18.02.2009 11:59 # 0
Похоже какой-то кусок подписывается моим ником
guest 19.02.2009 11:02 # 0
$str = sprintf('%03s', ++$str);
echo $str; //aaaa
guest 19.02.2009 13:28 # 0
$str = sprintf('%03s', ++$str);
echo $str; //aaaa
Ну и что? Возьми с полки пряник.
guest 19.02.2009 21:22 # 0
guest 19.02.2009 21:27 # 0
http://ru.php.net/operators.increment
Note that incrementing strings can give unpredictable results due to type changes. For example:
<?php
$i = '9C6';
for($n=0; $n<10; $n++)
echo ++$i . "\n";
?>
Gives you:
9C7
9C8
9C9
9D0
10
11
12
..etc.
guest 20.02.2009 21:11 # 0
guest 21.02.2009 21:49 # 0
Или ему тоже не верить?