4 回答

TA貢獻1831條經驗 獲得超10個贊
比較兩個表達式。
對于字符串,它使用 ASCII 值。
當第一個表達式分別小于、等于或大于第二個表達式時,它返回 -1、0 或 1。
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1
// Objects
$a = (object) ["a" => "b"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 0
$a = (object) ["a" => "b"];
$b = (object) ["a" => "c"];
echo $a <=> $b; // -1
$a = (object) ["a" => "c"];
$b = (object) ["a" => "b"];
echo $a <=> $b; // 1
// not only values are compared; keys must match
$a = (object) ["a" => "b"];
$b = (object) ["b" => "b"];
echo $a <=> $b; // 1

TA貢獻1821條經驗 獲得超6個贊
我閱讀了所有答案,但這對我來說還不夠,因為對我來說主題是PHP 如何在內部做事。于是我搜索了又搜索,結果發現 PHP 使用運算符 <=> 對字符串進行逐個字符的比較,當只有一個不同的字符時,它會停止,并且使用 ASCII 代碼,如下所示:
<?php
$str1 = "aaaaaaa";
$str2 = "bbbb";
echo $str1 <=> $str2, PHP_EOL; // -1
print_r(unpack("C*", $str1));
print_r(unpack("C*", $str2));
// output
Array
(
[1] => 97
[2] => 97
[3] => 97
[4] => 97
[5] => 97
[6] => 97
[7] => 97
)
Array
(
[1] => 98
[2] => 98
[3] => 98
[4] => 98
)
這就解釋了為什么$str1 <=> $str2 === -1。

TA貢獻1818條經驗 獲得超11個贊
字符串比較基于每個字母的 ASCII 代碼和字母順序。
所有以小寫字母開頭的字符串都會比以大寫字母開頭的字符串大(因為在 ASCII 中,大寫字母用 65 到 90 的數字表示,而小寫字母的代碼是 97 到 122)
比較是逐個字母進行的,一旦相同位置的兩個字母不同就停止比較。
結合字母順序,例如:
// "a" comes before "aa" so:
"a" < "aa"
// and
"a" <=> "aa" === -1
// "b" comes after "B" so:
"b" > "B"
// and
"b" <=> "B" === 1
"Aa" === "Aa"
// and
"Aa" <=> "Aa" === 0
// Because uppercase < lowercase
// "Abb" comes before "abb"
"Abb" < "abb"
"Abb" <=> "abb" === -1
// Because uppercase < lowercase
"Abb" < "a"
"Abb" <=> "a" === -1
// Because uppercase < lowercase
"Bbb" < "a"
"Bbb" <=> "a" === -1
//
"Cbb" > "Baa"
"Cbb" <=> "Baa" === 1

TA貢獻1784條經驗 獲得超9個贊
當你在字符串上使用時,它會從左到右,比較給定字符串中的每個字符以找到第一個差異,然后它會比較剛剛找到的不同字符的 ASCII 值。所以:
"aaa" < "aaaa" // because 4th char: '' < 'a'
"baaaaaa" > "abbb" // because 1st char 'b' > 'a'
"aaaaaaa" < "bbbb" // because 1st char 'a' < 'b'
而且,它是一個簡單的字符串宇宙飛船運算符
$str1 <=> $str2 will return :
1 if $str1 > $str2
-1 if $str1 < $str2
0 if $str1 = $str2
- 4 回答
- 0 關注
- 171 瀏覽
添加回答
舉報