SORU
27 EKİM 2008, PAZARTESİ


Hızlı dize PHP bir tamsayı dönüştürmek için yolu

En hızlı yol bu gibi bir dize dönüştürmek için ne PHP kullanarak bir tamsayı için "123"?

Neden özel yöntem en hızlısı bu mu? Eğer beklenmedik girişi, "hello" veya bir dizi gibi olursa ne olur?

CEVAP
27 EKİM 2008, PAZARTESİ


Sadece hızlı bir kıyaslama egzersiz kurdum:

Function             time to run 1 million iterations
--------------------------------------------
(int) "123":                0.55029
intval("123"):              1.0115  (183%)

(int) "0":                  0.42461
intval("0"):                0.95683 (225%)

(int) int:                  0.1502
intval(int):                0.65716 (438%)

(int) array("a", "b"):      0.91264
intval(array("a", "b")):    1.47681 (162%)

(int) "hello":              0.42208
intval("hello"):            0.93678 (222%)

Ortalama olarak, arama intval() iki buçuk kat daha yavaş ve fark eğer giriş zaten bir tamsayı ise en büyüktür.

Bilmek ilgi duyarımnedengerçi.


Güncelleme: tekrar testleri uyguladım, zorlama (0 $var) bu sefer

| INPUT ($x)      |  (int) $x  |intval($x) |  0   $x   |
|-----------------|------------|-----------|-----------|
| "123"           |   0.51541  |  0.96924  |  0.33828  |
| "0"             |   0.42723  |  0.97418  |  0.31353  |
| 123             |   0.15011  |  0.61690  |  0.15452  |
| array("a", "b") |   0.8893   |  1.45109  |  err!     |
| "hello"         |   0.42618  |  0.88803  |  0.1691   |
|-----------------|------------|-----------|-----------|

Ek:Sadece bu yöntemlerden birini seçerken bilmeniz gereken biraz beklenmeyen bir davranış geldim:

$x = "11";
(int) $x;      // int(11)
intval($x);    // int(11)
$x   0;        // int(11)

$x = "0x11";
(int) $x;      // int(0)
intval($x);    // int(0)
$x   0;        // int(17) !

$x = "011";
(int) $x;      // int(11)
intval($x);    // int(11)
$x   0;        // int(11) (not 9)

Test PHP 5.3.1 kullanıyorum

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Leigh Momii

    Leigh Momii

    10 Mayıs 2006
  • NicoleGrippo

    NicoleGrippo

    14 Kasım 2006
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011