我想知道php太空飞船运营商如何比较字符串,对象和数组.例如,下面的代码.
echo "Its Me at SO" <=> "Its Me at SO";
Run Code Online (Sandbox Code Playgroud)
将返回0,因为我知道所有字符都相同,计数是相同的.但如果我有如下代码:
echo "Its me at SO" <=> "its Me at so";
Run Code Online (Sandbox Code Playgroud)
它将返回1,意味着左侧大于右侧,但如何?它是在比较ASCII值吗?
现在让我们来看看阵列.下面的代码将返回0,因为两个数组在每个索引处的计数,值和值相等.
echo [1,2,3] <=> [1,2,3];
Run Code Online (Sandbox Code Playgroud)
但是下面的代码返回-1
echo [1,2,3] <=> [3,2,1];
Run Code Online (Sandbox Code Playgroud)
我不明白为什么?此运算符如何比较数组以及它如何计算左边的数组小于右边的数组?这些对象也是如此.
任何人都可以详细解答它如何与字符串,数组和对象一起使用?
谢谢
"根据PHP通常的类型比较规则(http://php.net/manual/en/types.comparisons.php)进行比较".
1)是的,它使用ASCII值
2)如果数组的长度不同,则值较小的数组较小.
否则,它按键比较数组,给"早期"值优先.例如比较$arr1[0]于$arr2[0]第一.如果$arr1有一个不存在的键$arr2,则数组不具有可比性(例如,如果我们使用的是非数字数组).
// Arrays are compared like this with standard comparison operators
// $arr1 and $arr2 are arrays
function standard_array_compare($arr1, $arr2)
{
// If either array has more values, that array is considered "larger"
if (count($arr1) < count($arr2)) {
return -1; // $arr1 < $arr2
} elseif (count($arr1) > count($arr2)) {
return 1; // $arr1 > $arr2
}
//Otherwise compare the array values directly
foreach ($arr1 as $key => $val) {
if (!array_key_exists($key, $arr2)) {
return null; // uncomparable, these arrays do not have the same keys
} elseif ($val < $arr2[$key]) {
return -1; // $arr1 < $arr2
} elseif ($val > $arr2[$key]) {
return 1; // $arr1 > $arr2
}
}
return 0; // $arr1 == $arr2
}
Run Code Online (Sandbox Code Playgroud)
注意,上面不是PHP的实际代码,只是所用逻辑的近似表示.
从本质上讲,它以类似的方式处理数组以比较大端数.它比较$arr1[0]对$arr2[0].如果它们是不同的,则返回-1或1,具体取决于哪个更大.如果它们是相同的,它会移动到$arr1[1]和$arr2[1].如果所有值都相同则返回0(数组相等)
虽然不完全相同,但考虑[1,2,3] <=> [3,2,1]基本等同于它可能更简单123 <=> 321...
| 归档时间: |
|
| 查看次数: |
1683 次 |
| 最近记录: |