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 — Comparaison binaire des n premiers caractères
Description
int strncmp
( string $str1
, string $str2
, int $len
)
Identique à la fonction strcmp(), avec la différence que vous pouvez spécifier le nombre maximum de caractères à utiliser pour la comparaison de str1 avec str2 grâce au paramètre len .
Notez que cette comparaison est sensible à la casse.
Liste de paramètres
- str1
-
La première chaîne.
- str2
-
La seconde chaîne.
- len
-
Nombre de caractères à utiliser pour la comparaison.
Valeurs de retour
Retourne < 0 si str1 est inférieure à str2 ; > 0 si str1 est supérieure à str2 , et 0 si les deux chaînes sont égales.
Voir aussi
- preg_match() - Expression rationnelle standard
- strcmp() - Comparaison binaire de chaînes
- strcasecmp() - Comparaison insensible à la casse de chaînes binaires
- substr() - Retourne un segment de chaîne
- stristr() - Version insensible à la casse de strstr
- strncasecmp() - Compare en binaire des chaînes de caractères
- strstr() - Trouve la première occurrence dans une chaîne
strncmp
codeguru at crazyprogrammer dot cba dot pl
24-Jan-2008 07:07
24-Jan-2008 07:07
Anonymous
17-Apr-2002 11:46
17-Apr-2002 11: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".
