strnatcasecmp

(PHP 4, PHP 5, PHP 7, PHP 8)

strnatcasecmp"Doğal sıralama" algoritmasını kullanarak dizgeleri harf büyüklüğüne duyarsız olarak karşılaştırır

Açıklama

strnatcasecmp(string $dizge1, string $dizge2): int

Bu işlev, "doğal sıralama" adı verilen ve alfasayısal dizgeleri insanlarca yapılan sıralamaya uygun olarak sıralayan bir algoritmayı gerçekler. strnatcmp() işlevinden farklı olarak karşılaştırma harf büyüklüğüne duyarlı değildir. Daha fazla bilgi için Martin Pool'un » Natural Order String Comparison belgesine bakınız.

Bağımsız Değişkenler

dizge1

İlk dizge.

dizge2

İkinci dizge.

Dönen Değerler

dizge1 dizgesi dizge2 dizgesinden küçükse -1; dizge1 dizgesi dizge2 dizgesinden büyükse 1; dizge1 dizgesi ile dizge2 dizgesi aynıysa sıfır döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
8.2.0 Bu işlev artık -1 veya 1 döndürüyor, evvelce pozitif vaya negatif bir sayı döndürürdü.

Örnekler

Örnek 1 - strnatcasecmp() örneği

<?php

var_dump
(strnatcasecmp('Apple', 'Banana'));
var_dump(strnatcasecmp('Banana', 'Apple'));
var_dump(strnatcasecmp('apple', 'Apple'));
?>

Yukarıdaki örneğin çıktısı:

int(-1)
int(1)
int(0)

Ayrıca Bakınız

  • preg_match() - Bir düzenli ifadeyi eşleştirmeye çalışır
  • strcmp() - İkil olarak güvenilir dizge karşılaştırması yapar
  • strcasecmp() - İkil olarak güvenilir ve harf büyüklüğüne duyarsız dizge karşılaştırması yapar
  • substr() - Dizgenin bir kısmını döndürür
  • stristr() - Harf büyüklüğüne duyarsız olarak ilk alt dizgeyi bulur
  • strncasecmp() - İlk n karakteri ikil ve harf büyüklüğüne duyarsız olarak karşılaştırır
  • strncmp() - İlk n karakteri ikil olarak karşılaştırır
  • strstr() - İlk alt dizgeyi bulur
  • setlocale() - Yereli ayarlar

add a note add a note

User Contributed Notes 3 notes

up
9
chatfielddaniel at googlemail dot com
13 years ago
The function treats '_' as after letters and numbers when it would be placed before logically.
up
2
Marco
8 years ago
Use strnatcmp to avoid the _ problem as mentioned below;

<<  The function treats '_' as after letters and numbers when it would be placed before logically. >>
up
-10
thomas at uninet dot se
18 years ago
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.
To Top