(Untitled)

Feb 13, 2009 05:26

какой вариант быстрее?

Код - пример #1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

function convert_bla_bla($numb)
{
$numb = (string)$numb;
$leng = strlen($numb);
if($leng==9) $numb = '0'.$numb;
elseif($leng!=10) return 'error: invalid input data.';
if(preg_match('/[^0-9]/',$numb)) return 'error: invalid input data.';
$numb[ ( Read more... )

Leave a comment

Comments 48

alex_ez February 13 2009, 04:37:02 UTC
preg_match то убери - с ним сравнивать понту ноль.
лучше is_numeric или is_integer использовать. бить пополам и два раза запускать is_numeric - будет быстрее.
а еще лучше не вырезать из строки, а собрать новую, если у тебя длина максимум 10.
типа,

function foo($n)
{
$n = (string)$n;
$l = strlen($n);
return ( $l != 9 && $l != 10 || !is_numeric( $n ) /* надо проверить на 9999999999 */ )
? 'error: invalid input data.'
: (substr( $n, -10, 4 ).$n{5}.substr( $n, -3, 3 ));
}

Reply

alex_ez February 13 2009, 04:41:36 UTC
php -r "echo is_numeric(\"9999999999\");" говорит 1. значет все ок.
если is_numeric не хватает - попробуй $n+0==$n

можно еще все через $n{х} складывать - может и быстрее будет...
только тогда надо убедится, что строка из 10. как в твоих вариантах.

Reply

r00d1k February 13 2009, 05:33:18 UTC
аааааааааааааа... спасибо за is_numeric(); это же надо было так? видать явно было пора спать.

Код - пример #1

1
2
3
4
5
6
7
8
9
10
11
12

function convert_bla_bla($numb)
{
$numb = (string)$numb;
$leng = strlen($numb);
if($leng==9) $numb = '0'.$numb;
elseif($leng!=10) return 'error: invalid input data.';
if(!is_numeric($numb)) return 'error: invalid input data.';
return '101'.$numb{0}.$numb{1}.$numb{2}.$numb{3}.$numb{5}.$numb{8}.$numb{9};
}
print convert_bla_bla('2709073792');
?>

Reply

alex_ez February 13 2009, 05:34:39 UTC
на здоровье)
приходите еще.

Reply


slach February 13 2009, 04:42:53 UTC
чувак а по моему они одинаковы =))) т.е. с точки зрения скорости ну савсем одинаковы

может быть с точки зрения байт кода первый вариант слегка быстрее потому что нету CALL на вызовы,
а он дороже чем обычное присваивание по индексу =)

а вот с точки зрения логики, присвоение будет работать не так как substr_replace
когда ты присваиваешь в строку
ты не удаляешь ... ты просто ставишь NULL в соответсвующий байт памяти
var_dump($numb);
сделай после $numb[7]
сам все поймешь

Reply

r00d1k February 13 2009, 05:38:07 UTC
у меея чисто спортивный интерес был.

Reply

phorror February 13 2009, 07:14:24 UTC
чистые спортсмены идут заниматься спортом на свежий воздух

Reply

r00d1k February 13 2009, 08:07:07 UTC
спорт разный бывает. вон даже компьютерные игры приняли как спортивные игры.

Reply


lenar February 13 2009, 05:01:03 UTC
а тупо померить слабо?

Reply

r00d1k February 13 2009, 05:11:07 UTC
ага

Reply


do_beer_man February 13 2009, 09:52:55 UTC
что-то слабовато для пятницы, еще и 13-го

Reply


zupernintendo February 13 2009, 10:16:49 UTC
что за дебилизм, у тебя есть варианты кода - вот и померяй, который быстрее.

Reply


Leave a comment

Up