PHP 5.4.36 Released

strncmp

(PHP 4, PHP 5)

strncmpComparación segura a nivel binario de los primeros n caracteres entre strings

Descripción

int strncmp ( string $str1 , string $str2 , int $len )

Esta función es similar a strcmp(), con la diferencia de que se puede especificar el (limite superior del) número de caracteres desde cada string a ser usado en la comparación.

Nótese que esta comparación es sensible a mayúsculas y minúsculas.

Parámetros

str1

El primer string.

str2

El segundo string.

len

El número de caracteres para usar en la comparación.

Valores devueltos

Devueleve < 0 si str1 es menor que str2; > 0 si str1 es mayor que str2 y 0 si son iguales.

Ver también

  • strncasecmp() - Comparación de los primeros n caracteres de cadenas, segura con material binario e insensible a mayúsculas y minúsculas
  • preg_match() - Realiza una comparación con una expresión regular
  • substr_compare() - Comparación segura a nivel binario de dos o más strings desde un índice hasta una longitud de caracteres dada
  • strcmp() - Comparación de string segura a nivel binario
  • strstr() - Encuentra la primera aparición de un string
  • substr() - Devuelve parte de una cadena

add a note add a note

User Contributed Notes 3 notes

up
4
codeguru at crazyprogrammer dot cba dot pl
6 years ago
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)
)
up
4
elloromtz at gmail dot com
4 years ago
if length is 0 regardless what the two strings are, it will return 0

<?php
strncmp
("xybc","a3234",0); // 0
strncmp("blah123","hohoho", 0); //0
?>
up
-1
bobvin at pillars dot net
3 years ago
For checking matches at the beginning of a short string, strpos() is about 15% faster than strncmp().

Here's a benchmark program to prove it:

<?php
$haystack
= "abcdefghijklmnopqrstuvwxyz";
$needles = array('abc', 'xyz', '123');
foreach (
$needles as $needle) {
 
$times['strncmp'][$needle] = -microtime(true);
  for (
$i = 0; $i < 1000000; $i++) {
   
$result = strncmp($haystack, $needle, 3) === 0;
  }
 
$times['strncmp'][$needle] += microtime(true);
}
foreach (
$needles as $needle) {
 
$times['strpos'][$needle] = -microtime(true);
  for (
$i = 0; $i < 1000000; $i++) {
   
$result = strpos($haystack, $needle) === 0;
  }
 
$times['strpos'][$needle] += microtime(true);
}
var_export($times);
?>
To Top