在 PHP 中,strcmp() 是一个非常常用的字符串比较函数。它用于比较两个字符串的大小,并根据比较结果返回不同的值。理解 strcmp() 返回值的含义对于开发中处理字符串操作非常重要。
strcmp() 函数的语法如下:
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</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>
该函数接受两个参数 str1 和 str2,并返回一个整数值,表示两个字符串的比较结果。
strcmp() 返回的整数值通常有三种可能的结果:负值、零、正值。
当 strcmp() 返回 0 时,表示两个字符串完全相等,即它们的内容、大小写、长度等都是一样的。简而言之,两个字符串在字面上是一样的。
<span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strcmp</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-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"两个字符串相等"</span></span><span>;
}
</span></span>
当 strcmp() 返回负值时,表示 str1 小于 str2。这个比较是基于字符的 ASCII 值来进行的。换句话说,如果字符串 str1 在字典序中排在 str2 之前,返回值就会是一个负数。
例如,"apple" 与 "banana" 进行比较时,由于字母 a 的 ASCII 值小于字母 b,所以 strcmp() 返回负值。
<span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"apple"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"banana"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strcmp</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-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"'apple' 小于 'banana'"</span></span><span>;
}
</span></span>
当 strcmp() 返回正值时,表示 str1 大于 str2。即,str1 在字典序中排在 str2 之后。
例如,"banana" 与 "apple" 进行比较时,strcmp() 会返回正值,因为字母 b 的 ASCII 值大于字母 a。
<span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"banana"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"apple"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strcmp</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-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"'banana' 大于 'apple'"</span></span><span>;
}
</span></span>
需要特别注意的是,strcmp() 进行的比较是 区分大小写 的。如果你不希望区分大小写,可以使用 strcoll() 或 strcasecmp() 这类函数。
<span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"hello"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strcmp</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-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"字符串不同"</span></span><span>;
}
</span></span>
在这个例子中,strcmp() 将返回一个非零值,因为 'H' 的 ASCII 值与 'h' 不同。
strcmp() 是一个功能强大的字符串比较函数,它通过返回负值、零值或正值,帮助我们理解两个字符串的大小关系:
返回0:两个字符串相等。
返回负值:str1 小于 str2。
返回正值:str1 大于 str2。
理解这个函数的返回值,对于字符串操作的优化和调试非常有帮助。