ホームページ  >  記事  >  バックエンド開発  >  文字列の自然な順序に関する問題

文字列の自然な順序に関する問題

WBOY
WBOYオリジナル
2016-06-13 13:50:32945ブラウズ

文字列の自然ソート問題
1.
$a = 'x2-g8';
$b = 'x2-y7';
echo strnatcasecmp($a, $b); // 出力-1
----------------------------------------------- ----- -
2,
$a = 'a10a';
$b = 'a010';
echo strnatcasecmp($a, $b) //出力 1--- ------------------------------------------- -----
3,
$ a = '10a';
$b = '10.0a';
echo strnatcasecmp($a, $b) //出力 1------------- --------------------------------

質問:
1. マニュアルには次のように書かれています:
文字列には、x2-g8 が含まれます。数値フィールドは数値以外の文字で区切られている場合、先頭のスペースは無視されます。 > これは先頭の位置を無視できるという意味ではないでしょうか。では、$a と $b は 28 と 27 に等しくありませんか?
2. $a と $b は両方とも 10 ではないでしょうか?なぜ異なるものとみなされるのでしょうか?
3. $a と $b は両方とも 10 だと思います~

マニュアルの「文字列の自然ソート」ルールを読みましたが、よく理解できません。文字列の自然な並べ替えのルールは何ですか?
また、文字列の自然ソートと配列の自然ソート(natcasesort())は同じルールなのでしょうか?

ありがとうございます!


-----解決策---------

決して使用しないでください。配列ソート、つまり自然なソートを使用できます。 通常は「L」という単語に従ってアルファベット順にソートされます。

中国語。gbk に変換して並べ替えることができます。対応する言語コードに変換すると、サイズを直接比較できるようになります。
大文字と小文字は異なります。



------解決策------------------

#1。文字列の最初の 0 は無視されるため、次の 2 つの例では結果が異なることがわかります。
echo strnatcasecmp('7','08');
echo strnatcasecmp('y7','y08'); //1

#2. 文字列内のスペースが数値以外の場合は無視されます。数値と数値、または非数字と非数字の場合、ASCII コードが優先されます。数値と数値の場合は、次の 2 つの状況があります。
a) など、0 で始まるいずれかの数値文字列が小さいものとみなされます。
echo strnatcasecmp ('y721','y07203'); //1、y=y,7 > 0
b) 両方が 0 でない場合は、小さいほうの数値になります。 as
echo strnatcasecmp ('y723','y70212'); //1 y=y,70212 > 723

なのでこの部分はわかりやすいです。

------解決策---------

echo strnatcasecmp('7','08' ) ; //-1
echo strnatcasecmp('y7','y08'); //1
-11
$a = 'x2-g8';
$ b = 'x2-y7';
echo strnatcasecmp($a, $b) //出力 -1
---------- ----- -----------------------
2.
$a = 'a10a';
$b = ' a010';
echo strnatcasecmp($a, $b); //出力 1
----------------------- ----- ---------------
3.
$a = '10a';
$b = '10.0a';
エコーstrnatcasecmp($a, $b); //出力 1

-111


に問題はありますか?
文字列の比較は、対応するビットが等しくなるまで常にバイト単位で行われ、対応する 2 つの文字を比較します

説明がこの説明と一致しない場合は、外国人は神ではないという事実に注意してください
もし理解の違いについて英語の先生をたたいてください

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。