I ran the following experiment to compare arrays.
1 st - using (substr($key,0,5 == "HTTP_") & 2 nd - using (!strncmp($key, 'HTTP_', 5))
I wanted to work out the fastest way to get the first few characters from a array
BENCHMARK ITERATION RESULT IS:
if (substr($key,0,5 == "HTTP_").... - 0,000481s
if (!strncmp($key, 'HTTP_', 5)).... - 0,000405s
strncmp() is 20% faster than substr() :D
<?php
// SAMPLE FUNCTION
function strncmp_match($arr)
{
foreach ($arr as $key => $val)
{
//if (substr($key,0,5 == "HTTP_")
if (!strncmp($key, 'HTTP_', 5))
{
$out[$key] = $val;
}
}
return $out;
}
// EXAMPLE USE
?><pre><?php
print_r(strncmp_match($_SERVER));
?></pre>
will display code like this:
Array
(
[HTTP_ACCEPT] => XXX
[HTTP_ACCEPT_LANGUAGE] => pl
[HTTP_UA_CPU] => x64
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[HTTP_USER_AGENT] => Mozilla/4.0
(compatible; MSIE 7.0;
Windows NT 5.1;
.NET CLR 1.1.4322;
.NET CLR 2.0.50727)
[HTTP_HOST] => XXX.XXX.XXX.XXX
[HTTP_CONNECTION] => Keep-Alive
[HTTP_COOKIE] => __utma=XX;__utmz=XX.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)
)
strncmp
(PHP 4, PHP 5)
strncmp — Binary safe σύγκριση των πρώτων n χαρακτήρων δύο string
Περιγραφή
Η συνάρτηση αυτή είναι όμοια με τη συνάρτηση strcmp(), με τη μόνη διαφορά ότι μπορείτε να κοθορίσετε το (πάνω όριο του) πλήθος των χαρακτήρων (len ) που θα χρησιμοποιηθούν από κάθε string για τη σύγκριση. Εάν κάποιο από τα strings είναι μικρότερο από το len , τότε για τη σύγκριση θα χρησιμοποιηθεί το μήκος αυτού του string.
Επιστρέφει < 0 εάν η παράμετρος str1 είναι μικρότερη της str2 , > 0 εάν η str1 είναι μεγαλύτερη της str2 , και 0 εάν οι δύο παράμετροι είναι ίσες.
Προσέξτε ότι η σύγκριση αυτή είναι case sensitive.
Ανατρέξετε επίσης στις: ereg(), strncasecmp(), strcasecmp(), substr(), stristr(), strcmp(), και strstr().
strncmp
24-Jan-2008 11:07
17-Apr-2002 04:46
strncmp("sample","sam",4) returns 1 because the final requirement is if one string terminates before len, then the other must also terminate at that position.
You can imagine that all your strings have one more final, invisible "termination" character. If that termination character happens to be within in len, then it must match, too.
For instance, write that termination character with, say, the sequence "\0". Then you can equivalently consider that function call as strncmp("sample\0","sam\0",4).
So, the "p" in "sample" does not match the termination character in "sam".
