php spaceship 运算符如何比较字符串、数组和对象

2023-11-23

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

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] to $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
}

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

本质上,它处理数组的方式与比较大端数字类似。它比较$arr1[0] to $arr2[0]。如果它们不同,则返回 -1 或 1,具体取决于哪个较大。如果它们相同,则继续$arr1[1] and $arr2[1]。如果所有值都相同,则返回 0(数组相等)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php spaceship 运算符如何比较字符串、数组和对象 的相关文章

  • 字符串不等于其自身

    But why if i echo good else echo bad echos gt gt bad 您应该复制此片段 如果你手写的话 它会起作用 它让我疯狂 你太狡猾了 第二个 I 不是小写拉丁文小写 i 我把它转储了 hexdump
  • 使用 Ajax 和 PHP 上传图像

    我想将图像上传到我的服务器 并控制 HTML 代码中的 PHP 回显 为此 我想使用 jQuery Ajax 但我不知道如何使用 Ajax 将图像发送到 PHP 这是一个大学项目 所以我不能使用任何类型的插件 我的实际代码 HTML
  • 如何将 javascript 倒计时器与服务器同步

    我有一个拍卖网站 有一个 JavaScript 计时器倒计时 由于某种原因 15 20 分钟后 该计时器比实际时间滞后 20 30 秒 在 1 小时的过程中 JavaScript 倒计时器可能会关闭至少 2 3 分钟 这让用户感到困惑 因为
  • PHP 字节数组转 Base64(来自 Mssql 的字节数组)

    我在表上使用 Mssql 和图像 例如 0xFFD8FFE000104A46494 我觉得是这样的字节数组 我想用 PHP 将其更改为图像 我试试这个 img src 但图像不显示 代码演示 http sandbox onlinephpfu
  • 在 php 中检测 iPad?

    如何向 iPad 查看者提供不同的页面 if SERVER HTTP USER AGENT Mozilla 5 0 iPad U CPU iPhone OS 3 2 like Mac OS X en us AppleWebKit 531 2
  • PHP 类中的命名空间和全局变量问题

    我陷入了这种困惑 我不明白为什么我的 HelperClass 下的全局 error 返回空 我可以验证 class gt error 确实之前已填充了数据 在这种情况下 命名空间是否存在某种我不知道的问题 请给我一些指点 以下是一些相关的代
  • 按带宽限制成员资格

    我刚刚将 Codeigniter 应用程序部署到 Amazon EC2 使用 S3 作为媒体 使用 RDS 作为 MySQL 我需要根据使用的带宽量限制用户帐户访问 帐户将基于带宽 例如基本帐户 x 每月最多 20GB 等 但是我不知道最好
  • 联系表 7 根据用户选择立即发送给多个联系人

    您好 我正在 WordPress 联系表单 7 中创建联系表单 如果用户选择 全部 我想立即向多个收件人发送电子邮件 我看过这个 但似乎没有记录您是否可以一次发送给多个收件人http contactform7 com selectable
  • 字符编码失败,为什么\xBD在PHP + HTML中显示不正确

    我只是想更好地理解字符编码 所以我做了一些测试 我有一个保存为 UTF 8 的 PHP 文件 如下所示 页面本身
  • orm和pdo的区别

    我对 ORM 和 PDO 之间的区别有点困惑 PDO是一种ORM吗 根据我的理解 ORM 基本上是一种数据映射 PDO 还提供了数据库数据的抽象 PDO 和 ORM 是两个完全不同的东西 PDO 是数据库访问抽象层的具体实现 它使您能够使用
  • Nginx 与 phpmyadmin 登录后重定向错误

    我正在使用 nginx 设置 phpMyAdmin 我可以访问 phpMyAdminhttp localhost phpmyadmin http localhost phpmyadmin 但是 当我登录时 URL 被重定向到http loc
  • Magento:查找包含产品的订单

    Magento 有没有办法找到包含给定产品的所有订单 如果可以通过管理面板来完成就更好了 报告 gt 产品 gt 订购的产品向我提供了产品销售的日期以及包含该产品的订单数量 但我需要知道哪些特定订单包含该产品 谢谢你 这个问题我在另一个问题
  • 在订单编辑页面添加自定义元框并将其显示在客户订单页面上

    在 WooCommerce 中 想要在 WooCommerce 管理订单页面上添加自定义元框 在此框中 我只想在保存到该订单的文本字段中输入跟踪号码 然后在客户查看订单页面上 我想显示一个按钮 用于打开带有跟踪信息的模式 该模式只会拉入一个
  • 在 Java 和 PHP 之间加密/解密字符串

    我使用 AES 加密来加密和解密服务器端的 php 和 Android 应用程序 作为客户端 之间的字符串 PHP 中的加密字符串为 HaxRKnMxT24kCJWUXaVvqDHahzurJQK sYA4lIHql U 在 Java 中是
  • PHP:分离业务逻辑和表示逻辑,值得吗? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么要在 PHP 中使用模板系统 https stackoverflow com questions 436014 why should i use templating system in php
  • WooCommerce 添加到购物车后停止重定向

    我希望在用户单击 添加到购物车 按钮后完全删除任何重定向 实际上我没有使用产品页面 我使用一个带有产品链接的简单按钮 如下所示 add to cart 492 我的用户将单击我页面上的多个 添加到购物车 按钮 因此在单击第一个按钮后他无法重
  • 从php字符串中删除奇怪的字符

    这就是我现在所拥有的 将 RSS feed 绘制到 php 中 RSS feed 中的原始 xml 如下所示 Paul 8217 s Confidence 到目前为止我拥有的 php 是这样的 newtitle item gt title
  • 使用 foreach 进行复杂的多维关联数组处理

    我不得不再次问这个问题 抱歉 但我在尝试处理这个数组时遇到了问题 我尝试了几种不同的方法 但没有一个是正确的 这是数组 Array search gt Array response gt Array errors gt number of
  • 散列 hash_hmac 时,Convert.ToChar(0) 散列结果与 PHP 中的 chr(0) 不同的字符串

    我在 PHP 中有一个字符串 它被转换为字节数组并进行哈希处理 转换为字节数组的字符串如下所示 G 字符 0 便便 我需要 C 中的等效字节数组 这样我才能得到相同的哈希值 编辑 这是完整的问题 生成的哈希值不同 PHP api secre
  • 寻求有关标记视频系统上的“相关视频”查询的建议

    好吧 我运行一个小型视频网站 在实际的视频页面上有一条与大多数视频页面 例如 YouTube 类似的 相关视频 目前我所做的就是随机获取其标签之一并查找其他视频相同的标签 毫不奇怪 这不是一个好方法 因为有些标签非常模糊 有些视频被错误标记

随机推荐

  • 如何在sql server中在两个二进制类型之间进行按位异或?

    根据这个链接 按位运算符 Transact SQL 我们可以在二进制和 int smallint tinyint 之间进行按位运算 反之亦然 但是如何在 sql server 中在两个二进制类型之间进行按位异或呢 或者 如果这是不可能的 我
  • SCNPhysicsWorld错误

    我一直在摆弄 swift 并试图让物理世界正常工作 这是我得到的错误 i386 架构的未定义符号 OBJC CLASS SCNPhysicsWorld 引用自 GameViewController o 中的 TFC3sk218GameVie
  • 从控制台应用程序发送电子邮件时导致套接字异常的原因是什么?

    我正在尝试编写一个基本的控制台应用程序来发送电子邮件 问题是我不断收到 Socket 异常 尝试以访问权限禁止的方式访问套接字 xxx xxx x xxx 25 我关闭了 Windows 防火墙 但它没有改变任何东西 我尝试在指定或不指定凭
  • 比较 2 个自定义对象 - C#

    我需要在基类中编写一个通用方法 该方法接受 2 个对象作为参数并比较它们是否相等 Ex public abstract class BaseData public bool AreEqual object O1 object O2 Need
  • ARM 上的 x86 Docker 镜像

    我有一个由 x86 计算机构建并上传到 Amazon ECR 的 Docker 映像 我正在尝试在 ARM 机器上运行此映像 但是 我得到以下信息 sudo docker run 1b3ed34937e8 WARNING The reque
  • 决定在运行时序列化哪些属性

    假设我必须按级别序列化 Car 类的对象 例如内部和公共 公共级别中的某些属性不应序列化 因为它们是内部的 目前 我能想到的实现此目的的 最简单 方法是使用继承 class CarPublic public int PropX get se
  • 如何在 HTML“选项”标签上显示工具提示?

    无论是使用纯 HTML 还是 jQuery 辅助 JavaScript 如何在个人上显示工具提示
  • 使用 AVPlayer 和 AVAssetExportSession 进行缓存

    我想使用 AVPlayer 缓存渐进式下载视频 如何将 AVPlayer 的项目保存到磁盘 我正在尝试在播放器的 currentItem 已完全加载 上使用 AVAssetExportSession 这段代码给了我 AVAssetExpor
  • Post/Redirect/Get 上的整页重新加载忽略缓存控制

    我有一个加载大量图像 CSS 和 JavaScript 的页面 我添加了一个远期的 Expires 标头 并将这些外部依赖项上的 Cache Control 设置为 public 以便它们应该被缓存 但每次我执行 Post Redirect
  • 运行bash脚本时自动输入密码[重复]

    这个问题在这里已经有答案了 例如 假设我有一个脚本说 bin bash sudo setpci s 00 02 0 F4 B 00 如何将 root 密码放入脚本中 以便在读取和执行 sudo 行时接受它作为密码 这样我就不必手动输入 产卵
  • MySQL 中 UNIX_TIMESTAMP 和 NOW() 的区别

    我有一个博客 用户可以发表评论 我插入他们发表评论的时间NOW 然后使用date j M Y stored timestamp 显示他们发布的时间 我想知道 NOW 是否返回locatime of the end user or the l
  • EntityManager查询后不刷新数据

    我当前的项目使用 HSQLDB2 0 和 JPA2 0 The scenario is I query DB to get list of contactDetails of person I delete single contactIn
  • Java 中的模拟文件 - 模拟内容 - Mockito

    我对模拟还很陌生 我一直在尝试模拟实际内容 本质上仅在内存中创建一个虚拟文件 以便在任何时候都不会将数据写入磁盘 我尝试过一些解决方案 例如模拟文件并模拟尽可能多的我能找出的属性 然后使用文件写入器 缓冲写入器写入其中 但这些解决方案效果不
  • android 工具链缺少 crtbegin_so.o (自定义构建)

    我使用 android build gcc sh 脚本将 gdc 与 gcc 一起编译 并在 build core definitions mk 中包含了一个新的存根 以在构建过程中处理 D 语言文件 我知道此时编译一切正常 但我的问题是链
  • 如何创建带有可重写变量的 PayPal 按钮

    您好 我想创建一个具有动态设定金额的贝宝购买按钮 我想通过表单内的文本输入字段传递金额 并通过隐藏字段传递 item number 问题是 无论我做什么 我都会从 paypal 网站上获得一个加密的 s xclick 按钮 此按钮不允许将隐
  • 2D 平台游戏两个轴的碰撞问题

    我正在使用 C 和 SDL 开发一个小型 2D 平台游戏 格斗游戏 但在碰撞检测方面遇到了很多麻烦 这些关卡由一系列图块组成 我使用 for 循环来遍历每个图块 我知道这可能不是最好的方法 而且我可能也需要这方面的帮助 对于角色的每一侧 我
  • Android:如何避免标题在列表视图中滚动,android?

    我有一个列表视图 我将 headerview 添加到该列表中 一切都很好 但是当滚动列表 headerview 也随着列表移动时 所以我想避免 headerview 滚动 我的意思是当我列表到达顶部视图 标题栏 时我必须只滚动列表 head
  • 如何控制Windows中的文件访问?

    Go 提供os Chmod 用于设置文件和目录权限 例如 如果我想确保文件只能由当前用户访问 我可以执行以下操作 os Chmod somefile txt 0600 这在 Linux 上工作得很好 但在 Windows 上却毫无作用 在深
  • com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer 中调用的构造函数引发异常

    我已更改依赖项以导入 com android support appcompat v7 23 0 1 和 com android support design 23 0 1 但它无法修复错误 YouTube 片段显示 初始化 Youtube
  • php spaceship 运算符如何比较字符串、数组和对象

    我想知道 php spaceship 运算符如何比较字符串 对象和数组 例如 下面的代码 echo Its Me at SO lt gt Its Me at SO 将返回 0 因为我知道所有字符都相同 计数也相同 但是如果我有如下代码 ec