downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

strpbrk> <strncasecmp
[edit] Last updated: Fri, 17 May 2013

view this page in

strncmp

(PHP 4, PHP 5)

strncmpString-Vergleich der ersten n Zeichen (Binary safe)

Beschreibung

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

Diese Funktion ist ähnlich strcmp() mit dem Unterschied, dass Sie die (maximale) Anzahl Zeichen (len) angeben können, die bei jedem String verglichen werden soll.

Beachten Sie, dass der Vergleich Groß- und Kleinschreibung berücksichtigt.

Parameter-Liste

str1

Die erste Zeichenkette.

str2

Die zweite Zeichenkette.

len

Die Anzahl der Zeichen, die für den Vergleich herangezogen werden soll.

Rückgabewerte

Ist str1 kleiner als str2 wird < 0 zurückgegeben, ist str1 größer als str2 > 0, und bei Gleichheit gibt die Funktion 0 zurück.

Siehe auch

  • strncasecmp() - Binärdaten-sicherer und groß- und kleinschreibungs-unabhängiger Stringvergleich der ersten n Zeichen
  • preg_match() - Führt eine Suche mit einem regulären Ausdruck durch
  • substr_compare() - Binärdaten-sicherer Vergleich zweier Strings, beginnend an einer bestimmten Position und endend nach einer festgelegten Länge
  • strcmp() - Vergleich zweier Strings (Binary safe)
  • strstr() - Findet das erste Vorkommen eines Strings
  • substr() - Gibt einen Teil eines Strings zurück



strpbrk> <strncasecmp
[edit] Last updated: Fri, 17 May 2013
 
add a note add a note User Contributed Notes strncmp - [5 notes]
up
5
elloromtz at gmail dot com
3 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
codeguru at crazyprogrammer dot cba dot pl
5 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
0
bobvin at pillars dot net
2 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);
?>
up
-2
Anonymous
3 months ago
Returns FALSE if $len is negative or NAN.

Floating point values for $len are rounded towards 0.
up
-3
Anonymous
11 years ago
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".

 
show source | credits | stats | sitemap | contact | advertising | mirror sites