PHP.mk документација

strnatcmp

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.strnatcmp.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.strnatcmp.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
strnatcmp

Референца за `function.strnatcmp.php` со подобрена типографија и навигација.

function.strnatcmp.php

strnatcmp

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

strnatcmpСпоредби на низи користејќи алгоритам за „природно нарачување“

= NULL

strnatcmp(string $string1, string $string2): int

Оваа функција имплементира алгоритам за споредба што ги нарачува алфанумеричките низи на начин на кој човек би ги нарачал, ова е опишано како „природно нарачување“. Имајте предвид дека оваа споредба е чувствителна на големи и мали букви.

Параметри

string1

Првата низа.

string2

Втората низа.

Вратени вредности

Враќа вредност помала од 0 ако string1 е помала од string2; вредност поголема од 0 ако string1 е поголемо од string2Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во 0 ако се еднакви. Не може сигурно да се изведе никакво посебно значење од вредноста освен нејзиниот знак.

Дневник на промени

Верзија = NULL
8.2.0 Оваа функција веќе не е загарантирана да враќа strlen($string1) - strlen($string2) кога должините на низите не се еднакви, но сега може да враќа -1 or 1 instead.

Примери

Пример за разликата помеѓу овој алгоритам и обичните алгоритми за сортирање низи на компјутер (искористени во strcmp()) може да се види подолу:

Пример #1 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);
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

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
)
За повеќе информации видете: Мартин Пул: » Споредба на низи по природен редослед page.

Види Исто така

  • preg_match() - Изврши совпаѓање со регуларен израз
  • strcasecmp() - Бинарно безбедно споредување на низи што не е чувствително на големи и мали букви
  • substr() - Врати дел од низа
  • stristr() - strstr што не прави разлика помеѓу големи и мали букви
  • strcmp() - Бинарно безбедно споредување на низи
  • strncmp() - Бинарно безбедно споредување на првите n карактери
  • strncasecmp() - Бинарно безбедно споредување на првите n знаци без разлика на големи и мали букви
  • strnatcasecmp() - Споредби на низи чувствителни на големи и мали букви користејќи алгоритам за „природно нарачување“
  • strstr() - Најди ја првата појава на низа
  • natsort() - Сортирај низа користејќи алгоритам за „природно нарачување“
  • natcasesort() - Сортирај низа користејќи алгоритам за „природно нарачување“ чувствителен на големи и мали букви

Белешки од корисници 4 белешки

во dot games dot mq на gmail dot com
пред 9 години
Can also be used with combination of a compare for an array nested value, like

<?php
$array = array(
    "city" => "xyz",
    "names" => array(
        array(
            "name" => "Ana2",
            "id" => 1
        ) ,
        array(
            "name" => "Ana1",
            "id" => 2
        )
    )
);
usort($array["names"], function ($a, $b)    {    return strnatcmp($a['name'], $b['name']);} );
thomas на uninet dot se
19 години пред
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.
chris на ocproducts dot com
пред 8 години
This function has some interesting behaviour on strings consisting of mixed numbers and letters.

One may expect that such a mixed string would be treated as alpha-numeric, but that is not true.

var_dump(strnatcmp('23','123')); →
int(-1)
As expected, 23<123   (even though first digit is higher, overall number is smaller)

var_dump(strnatcmp('yz','xyz')); →
int(1)
As expected, yz>xyz   (string comparison, irregardless of string length)

var_dump(strnatcmp('2x','12y')); →
int(-1)
Remarkable, 2x<12y    (does a numeric comparison)

var_dump(strnatcmp('20x','12y'));
int(1)
Remarkable, 20x>12y    (does a numeric comparison)

It seems to be splitting what is being compared into runs of numbers and letters, and then comparing each run in isolation, until it has an ordering difference.
spamspamspam на gmx dot com
пред 7 години
Some more remarkable outcomes:

var_dump(strnatcmp("0.15m", "0.2m"));
int(1)

var_dump(strnatcmp("0.15m", "0.20m"));
int(-1)

It's not about localisation:

var_dump(strnatcmp("0,15m", "0,2m"));
int(1)

var_dump(strnatcmp("0,15m", "0,20m"));
int(-1)
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.