PHP Doku:: String-Vergleich "natürlicher Ordnung" ohne Unterscheidung der Schreibweise - function.strnatcasecmp.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzTextverarbeitungZeichenkettenString-Funktionenstrnatcasecmp

Ein Service von Reinhard Neidl - Webprogrammierung.

String-Funktionen

<<strlen

strnatcmp>>

strnatcasecmp

(PHP 4, PHP 5)

strnatcasecmpString-Vergleich "natürlicher Ordnung" ohne Unterscheidung der Schreibweise

Beschreibung

int strnatcasecmp ( string $str1 , string $str2 )

Die Funktion implementiert einen Vergleichsalgorithmus, der alphanumerische Strings sortiert, wie es ein Mensch täte. Das Verhalten der Funktion entspricht strnatcmp() mit der Ausnahme, dass der Vergleich ohne Berücksichtigung von Groß- und Kleinschreibungen durchgeführt wird. Weitere Informationen finden sie auf Martin Pools » Natural Order String Comparison-Seite.

Parameter-Liste

str1

Die erste Zeichenkette.

str2

Die zweite Zeichenkette.

Rückgabewerte

Ähnlich anderen String-Vergleichs-Funktionen gibt diese < 0 zurück, wenn str1 kleiner ist als str2, bzw. > 0, wenn str1 größer ist als str2, oder 0, wenn sie gleich sind.

Siehe auch

  • preg_match() - Führt eine Suche mit einem regulären Ausdruck durch
  • strcmp() - Vergleich zweier Strings (Binary safe)
  • strcasecmp() - Vergleich von Zeichenketten ohne Unterscheidung der Groß- und Kleinschreibung (Binary safe)
  • substr() - Gibt einen Teil eines Strings zurück
  • stristr() - Wie strstr, aber unabhängig von Groß- bzw. Kleinschreibung
  • strncasecmp() - Binärdaten-sicherer und groß- und kleinschreibungs-unabhängiger Stringvergleich der ersten n Zeichen
  • strncmp() - String-Vergleich der ersten n Zeichen (Binary safe)
  • strstr() - Findet das erste Vorkommen eines Strings
  • setlocale() - Setzt Locale Informationen


Ein BenutzerBeitrag:
- Beiträge aktualisieren...
thomas at uninet dot se
25.07.2006 9:49
There seems to be a bug in the localization for strnatcmp and strnatcasecmp. I searched the reported bugs and found a few entries which were up to four years old (but the problem still exists when using swedish characters).

These functions might work instead.
<?php
function _strnatcasecmp($left, $right) {
  return
_strnatcmp(strtolower($left), strtolower($right));
}

function
_strnatcmp($left, $right) {
  while((
strlen($left) > 0) && (strlen($right) > 0)) {
    if(
preg_match('/^([^0-9]*)([0-9].*)$/Us', $left, $lMatch)) {
     
$lTest = $lMatch[1];
     
$left = $lMatch[2];
    } else {
     
$lTest = $left;
     
$left = '';
    }
    if(
preg_match('/^([^0-9]*)([0-9].*)$/Us', $right, $rMatch)) {
     
$rTest = $rMatch[1];
     
$right = $rMatch[2];
    } else {
     
$rTest = $right;
     
$right = '';
    }
   
$test = strcmp($lTest, $rTest);
    if(
$test != 0) {
      return
$test;
    }
    if(
preg_match('/^([0-9]+)([^0-9].*)?$/Us', $left, $lMatch)) {
     
$lTest = intval($lMatch[1]);
     
$left = $lMatch[2];
    } else {
     
$lTest = 0;
    }
    if(
preg_match('/^([0-9]+)([^0-9].*)?$/Us', $right, $rMatch)) {
     
$rTest = intval($rMatch[1]);
     
$right = $rMatch[2];
    } else {
     
$rTest = 0;
    }
   
$test = $lTest - $rTest;
    if(
$test != 0) {
      return
$test;
    }
  }
  return
strcmp($left, $right);
}
?>

The code is not optimized. It was just made to solve my problem.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)