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

search for in the

strncasecmp> <strnatcasecmp
Last updated: Sun, 25 Nov 2007

view this page in

strnatcmp

(PHP 4, PHP 5)

strnatcmp — Συγκρίσεις string με τη χρήση ενός αλγορίθμου "φυσικής διάταξης"

Περιγραφή

int strnatcmp ( string $str1 , string $str2 )

Η συνάρτηση αυτή χρησιμοποιεί έναν αλγόριθμο σύγκρισης, ο οποίος διατάσσει τα αλφαριθμητικά strings με τον ίδιο τρόπο που θα το έκανε και ένας άθρωπος. Ένα παράδειγμα της διαφοράς μεταξύ αυτού του αλγορίθμου και αυτών που χρησιμοποιούνται συνήθως από τους υπολογιστές για την ταξινόμηση των string (χρησιμοποιούνται και στην strcmp()) μπορεί να θεωρηθεί το ακόλουθο:

<?php
$arr1 
$arr2 = array("img12.png","img10.png","img2.png","img1.png");
echo 
"Standard string comparison\n";
usort($arr1,"strcmp");
print_r($arr1);
echo 
"\nNatural order string comparison\n";
usort($arr2,"strnatcmp");
print_r($arr2);
?>
Ο παραπάνω κώδικας θα παράξει το ακόλουθο αποτέλεσμα:
Standard string comparison
Array
(
    [0] => img1.png
    [1] => img10.png
    [2] => img12.png
    [3] => img2.png
)

Natural order string comparison
Array
(
    [0] => img1.png
    [1] => img2.png
    [2] => img10.png
    [3] => img12.png
)
Για περισσότερες πληροφορίες μπορείτε να ανατρέξετε στη σελία του Martin Pool » Natural Order String Comparison.

Όμοια με τις υπόλοιπες συναρτήσεις σύγκρισης, και αυτή επιστρέφει < 0 εάν η παράμετρος str1 είναι μικρότερη της str2 , > 0 εάν η str1 είναι μεγαλύτερη της str2 , και 0 εάν οι δύο παράμετροι είναι ίσες.

Προσέξτε ότι αυτή η σύγκριση είναι case sensitive.

Ανατρέξτε επίσης στις: ereg(), strcasecmp(), substr(), stristr(), strcmp(), strncmp(), strncasecmp(), strnatcasecmp(), strstr(), natsort() και natcasesort().



add a note add a note User Contributed Notes
strnatcmp
thomas at uninet dot se
25-Jul-2006 12:50
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.

strncasecmp> <strnatcasecmp
Last updated: Sun, 25 Nov 2007
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites