हरण - स्ट्रिंग को PHP में पूर्णांक में कनवर्ट करने का सबसे तेज़ तरीका




पूर्णांक संख्या क्या होती है (6)

PHP का उपयोग करके, इस तरह की स्ट्रिंग को कन्वर्ट करने का सबसे तेज़ तरीका क्या है: "123" एक पूर्णांक में?

वह विशेष विधि सबसे तेज़ क्यों है? क्या होता है यदि यह अप्रत्याशित इनपुट हो, जैसे कि "hello" या सरणी?


अधिक विज्ञापन-बेंचमार्क परिणाम:

$ time php -r 'for ($x = 0;$x < 999999999; $x++){$i = (integer) "-11";}'     

real    2m10.397s
user    2m10.220s
sys     0m0.025s

$ time php -r 'for ($x = 0;$x < 999999999; $x++){$i += "-11";}'              

real    2m1.724s
user    2m1.635s
sys     0m0.009s

$ time php -r 'for ($x = 0;$x < 999999999; $x++){$i = + "-11";}'             

real    1m21.000s
user    1m20.964s
sys     0m0.007s

आप फ्लोट का उपयोग करके लंबी स्ट्रिंग को पूर्णांक में परिवर्तित कर सकते हैं

$float = (float)$num;

या यदि आप पूर्णांक नहीं चाहते हैं तो फ्लोटिंग वैल नहीं तो साथ जाएं

$float = (int)$num;

पूर्व के लिए

(int)   "1212.3"   = 1212 
(float) "1212.3"   = 1212.3

एक बेंचमार्क चलाएं, और यह वास्तविक पूर्णांक प्राप्त करने का सबसे तेज़ तरीका है (सभी उपलब्ध विधियों का उपयोग करके) है

$foo = (int)+"12.345";

बस उपयोग कर रहा हूँ

$foo = +"12.345";

एक फ्लोट देता है।


किसी भी स्ट्रिंग से पूर्णांक एक्स्ट्रैक्ट

$ में = 'tel.123-12-33';

preg_match_all('!\d+!', $in, $matches);
$out =  (int)implode('', $matches[0]);

// $ आउट = '1231233';


मैंने अभी एक त्वरित बेंचमार्किंग अभ्यास स्थापित किया है:

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%)

औसतन, कॉलिंग अंतराल () ढाई गुना धीमा होता है, और अंतर सबसे बड़ा होता है यदि आपका इनपुट पहले से ही एक पूर्णांक है।

मुझे यह जानने में दिलचस्पी होगी कि क्यों

अद्यतन: मैंने बार-बार परीक्षण चलाए हैं, इस बार जबरदस्ती के साथ (0 + $var)

| 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   |
|-----------------|------------|-----------|-----------|

अनुपूरक: मैं बस थोड़ा अप्रत्याशित व्यवहार में आया हूं जिसे आपको इन तरीकों में से किसी एक को चुनने के बारे में पता होना चाहिए:

$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)

PHP 5.3.1 का उपयोग करके परीक्षण किया गया


$int = settype("100", "integer"); //convert the numeric string to int




casting