strnatcmp 是 PHP 中的一个字符串比较函数,它按自然顺序对两个字符串进行比较。自然顺序比较的原则是:在比较字符串时,数字部分按数字大小进行比较,而非按字符的字面顺序。
<span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str2</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
$str1 和 $str2 为需要比较的两个字符串。
返回值:如果 $str1 小于 $str2,返回负数;如果 $str1 等于 $str2,返回 0;如果 $str1 大于 $str2,返回正数。
<span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"a10"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"a2"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>); </span><span><span class="hljs-comment">// 输出 1,因为 "a10" 按照自然排序在 "a2" 之后</span></span><span>
</span></span>
如上所示,strnatcmp 会将字符串中的数字部分当做数字来比较,而不是按字符逐个对比。
natsort 是 PHP 中用来对数组进行自然顺序排序的函数。与 strnatcmp 不同,natsort 是一个排序函数,它直接对数组进行排序,而不是对单个字符串进行比较。
<span><span><span class="hljs-title function_ invoke__">natsort</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$array</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
$array 为需要排序的数组。
返回值:排序成功时返回 true,失败时返回 false。
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">"a10"</span></span><span>, </span><span><span class="hljs-string">"a2"</span></span><span>, </span><span><span class="hljs-string">"a1"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">natsort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>
输出:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">2</span></span><span>] => a1
[</span><span><span class="hljs-number">1</span></span><span>] => a2
[</span><span><span class="hljs-number">0</span></span><span>] => a10
)
</span></span>
可以看到,natsort 将数组元素按照自然顺序进行排序。它的行为与 strnatcmp 类似,但应用范围是数组,而不是单一的字符串。
自然排序:strnatcmp 和 natsort 都遵循自然排序的规则,特别是在字符串中包含数字时。
数字与字符的比较方式:它们都会把字符串中的数字部分当做数字进行比较,而不是逐个字符地比较。