php - php spaceship operator 究竟如何比较字符串、数组和对象

标签 php php-7

我想知道 php 宇宙飞船运算符如何比较字符串、对象和数组。例如,下面的代码。

echo "Its Me at SO" <=> "Its Me at SO"; 

将返回 0,因为我知道所有字符都相同,计数相同。但是如果我有如下代码:

echo "Its me at SO" <=> "its Me at so"; 

它会返回 1,表示左侧大于右侧,但是如何呢?它是比较 ASCII 值吗?

现在让我们来谈谈数组。下面的代码将返回 0,因为两个数组的计数、值和每个索引处的值都相等。

echo [1,2,3] <=> [1,2,3];

但是下面的代码返回-1

echo [1,2,3] <=> [3,2,1]; 

我不明白为什么?这个运算符如何比较数组以及它如何计算出左边的数组小于右边的数组? 对象也是如此。

任何人都可以详细回答它如何处理字符串、数组和对象吗?

谢谢

最佳答案

“比较是根据 PHP 的常用类型比较规则 ( http://php.net/manual/en/types.comparisons.php )”执行的。

1) 是的,它使用 ASCII 值

2) 如果数组长度不同,则数组越小,值越少。

否则它会逐键比较数组,优先考虑“较早”的值。例如比较 $arr1[0]$arr2[0]第一的。如果$arr1有一个在 $arr2 中不存在的 key ,数组不可比较(例如,如果我们使用非数字数组)。

// 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
}

请注意,以上并不是 PHP 的实际代码,只是所用逻辑的近似表示。

从本质上讲,它以类似于比较大端数字的方式来处理数组。它比较$arr1[0]$arr2[0] .如果它们不同,则返回 -1 或 1,具体取决于哪个较大。如果它们相同,它会转到 $arr1[1]。和 $arr2[1] .如果所有值都相同,则返回 0(数组相等)

虽然不完全相同,但考虑 [1,2,3] <=> [3,2,1] 可能更简单基本上等同于123 <=> 321...

关于php - php spaceship operator 究竟如何比较字符串、数组和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34811599/

相关文章:

php - MySQL 和 CI 的 UTF8 数据问题

php - 升级到 PHP 版本 7 后,出现 XAMPP Apache 服务器错误

php - PHP 7.0扩展Exception类参数错误错误

php - 合并具有排序顺序的多个数组 PHP

php - OpenVBX (Twilio) 中的 SQL 存储

php - Linux Change 文件的修改日期?

php - 构建对象评论树

php - 无法在 bindparam PDO 中使用 ORDER BY 和 ASC/DESC

php - 无法通过 Docker 构建安装 PHP Zip 模块

php 7 文件被下载而不是执行