目录
关键要点
数组操作符
数组并集
数组相等性
数组恒等性
使用其他操作符与数组
致命错误:意外的操作数类型
将数组视为整数
将数组视为字符串
无效
结论
PHP数组操作符常见问题解答 (FAQs)
PHP中有哪些不同类型的数组操作符?
PHP中并集( )操作符是如何工作的?
相等性(==)和恒等性(===)操作符有什么区别?
PHP中不相等性(!= 或 <>)操作符是如何工作的?
PHP中的非恒等性(!==)操作符的作用是什么?
可以组合PHP中的数组操作符吗?
如何使用数组操作符检查数组是否包含特定值?
如何从PHP数组中删除特定值?
如何在PHP中对数组进行排序?
如何反转PHP中数组的顺序?
首页 后端开发 php教程 PHP主| PHP中的阵列操作员:有趣但口语不太说话

PHP主| PHP中的阵列操作员:有趣但口语不太说话

Feb 23, 2025 am 09:04 AM

PHP数组操作符详解:鲜为人知的技巧

PHP Master | Array Operators in PHP: Interesting but Less Spoken

PHP操作符可分为七大类:算术、赋值、位运算、比较、错误控制、执行、增量/减量、逻辑、字符串、数组和类型操作符。本文重点介绍数组操作符,并涵盖其他一些操作符在与数组结合使用时的行为。

关键要点

  • PHP数组操作符包括并集、相等性、恒等性、不相等性和非恒等性,每个操作符执行的功能各不相同,例如合并数组、检查数组是否相等或恒等,以及检查数组是否不相等或非恒等。
  • 并集操作符( )根据键合并两个数组,忽略第二个数组中已在第一个数组中存在的键。然而,人们常常误解为并集是基于数组值,而实际上是基于数组键。
  • 恒等操作符(===)检查两个数组在元素数量、键值对、元素顺序以及所有对应值的数 据类型方面是否相同。但对于数组键,如果键是整数,并且在另一个数组中存在类似的整数字符串表示形式作为键,则它会进行宽松匹配。
  • 当对数组应用数组操作符以外的操作符时,PHP的行为有所不同。例如,当对数组应用算术操作符时,PHP会发出致命错误;当使用逻辑操作符时,它将数组视为整数;当使用字符串连接操作符时,它将数组视为字符串。增量/减量操作符对数组没有影响。

数组操作符

官方文档只对每个数组操作符进行了简短的描述,有时这会使人们难以理解每个操作符的预期结果。让我们仔细研究每个数组操作符,以便更清楚地了解它们的功能。所有这些操作符都是二元的,也就是说每个操作符都精确地作用于两个数组。

数组并集

首先是并集操作符( ),它根据数组的键给出两个数组的并集。它执行宽松的键匹配,如果第二个数组的等效键已存在于第一个数组中,则忽略第二个数组的所有键。第二个数组的其余键(以及对应的值)将附加到第一个数组中。

<?php
$array1 = array('a', 'b', 'c');
$array2 = array('d', 'e', 'f', 'g', 'h', 'i');
print_r($array1 + $array2);
print_r($array2 + $array1);
?>
登录后复制
登录后复制
登录后复制
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => g
    [4] => h
    [5] => i
)
Array
(
    [0] => d
    [1] => e
    [2] => f
    [3] => g
    [4] => h
    [5] => i
)</code>
登录后复制
登录后复制
登录后复制

对于第一个print_r(),$array2中的前三个元素具有已存在于$array1中的键,因此'd'、'e'和'f'在结果数组中被忽略。对于第二个print_r(),$array1的所有键都已存在于$array2中,因此它的所有元素都被忽略。宽松匹配行为可能会给你带来完全出乎意料的结果,但也为优化和宽松编码提供了令人兴奋的机会。

<?php
$array1 = array('0' => 'a', '1' => 'b', '2' => 'c', '3' => 'd');
$array2 = array(false => 'e', 1 => 'f', 2 => 'g', 3 => 'h', 4 => 'i');
print_r($array1 + $array2);
?>
登录后复制
登录后复制
登录后复制
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => i
)</code>
登录后复制
登录后复制
登录后复制

人们常常误解为并集是基于数组值,而实际上这个操作符实现了数组键的并集。对于基于值的并集,您可以结合使用array_merge()和array_unique():

<?php
$array1 = array('a', 'b', 'c');
$array2 = array('d', 'e', 'f', 'g', 'h', 'i');
print_r($array1 + $array2);
print_r($array2 + $array1);
?>
登录后复制
登录后复制
登录后复制
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => g
    [4] => h
    [5] => i
)
Array
(
    [0] => d
    [1] => e
    [2] => f
    [3] => g
    [4] => h
    [5] => i
)</code>
登录后复制
登录后复制
登录后复制

数组相等性

相等操作符(==)检查两个数组是否相似。如果第一个数组中的所有键值对在第二个数组中都有等效的键值对,则该操作符返回true。它宽松地匹配值和键,并且忽略元素的顺序。

<?php
$array1 = array('0' => 'a', '1' => 'b', '2' => 'c', '3' => 'd');
$array2 = array(false => 'e', 1 => 'f', 2 => 'g', 3 => 'h', 4 => 'i');
print_r($array1 + $array2);
?>
登录后复制
登录后复制
登录后复制
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => i
)</code>
登录后复制
登录后复制
登录后复制

两个数组中的元素顺序不同,但相同的值与每个数组中相似的键绑定。但是,以下两者不相等,因为两个数组都有不同的键值对:

<?php
$union = array_unique(array_merge($array1, $array2));
print_r($union);
?>
登录后复制
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
    [5] => f
    [6] => g
    [7] => h
    [8] => i
)</code>
登录后复制

不相等操作符(!= 或 <>)检查两个数组是否不相似,并且是相等操作符的完美反义词。相等操作符返回false的任何内容,此操作符都返回true,反之亦然。

<?php
$array1 = array('1' => 1, '2' => 2, '3' => 3, '0' => 0);
$array2 = array(false => '0', 1 => '1', 2 => '2', 3 => '3');
var_dump($array1 == $array2);
?>
登录后复制
<code>bool(true)</code>
登录后复制
登录后复制

数组恒等性

恒等操作符(===)检查两个数组是否相同。如果两个数组满足以下条件,则它们是相同的:

  • 具有相同数量的元素
  • 具有相同的键值对
  • 具有相同的元素顺序
  • 所有对应值的 数据类型相同

但是,对于数组键,如果键是整数,并且在另一个数组中存在类似的整数字符串表示形式作为键,则恒等操作符会进行宽松匹配。对于浮点数与字符串键的匹配,此操作符会进行严格匹配。PHP手册没有说明这种差异。

<?php
$array1 = array(1, 2);
$array2 = array(2, 1);
var_dump($array1 == $array2);
?>
登录后复制
<code>bool(false)</code>
登录后复制
登录后复制
登录后复制
<?php
$array1 = array('1' => 1, '2' => 2, '3' => 3, '0' => 0);
$array2 = array(false => '0', 1 => '1', 2 => '2', 3 => '3');
var_dump($array1 != $array2);
?>
登录后复制
<code>bool(false)</code>
登录后复制
登录后复制
登录后复制
<?php
// 数组几乎相同,但键的类型不同
$array1 = array('0' => '0', '1' => '1', '2' => '2', '3' => '3');
$array2 = array(0 => '0', 1 => '1', 2 => '2', 3 => '3');
var_dump($array1 === $array2);
?>
登录后复制
<code>bool(true)</code>
登录后复制
登录后复制

非恒等操作符(!==)检查两个数组是否不相同。同样,此操作符与恒等操作符完全相反,这意味着如果两个数组相同,则此操作符会返回false。

<?php
// 两个数组中的元素顺序不同
$array1 = array('0' => '0', '1' => '1', '2' => '2', '3' => '3');
$array2 = array(1 => '1', 2 => '2', 3 => '3', 0 => '0');
var_dump($array1 === $array2);
?>
登录后复制
<code>bool(false)</code>
登录后复制
登录后复制
登录后复制

使用其他操作符与数组

当应用上述操作符以外的操作符于数组时,PHP的行为有所不同。以下是这些操作符的列表以及它们应用于数组时的行为。

致命错误:意外的操作数类型

当应用以下操作符于数组时,PHP会发出致命错误:

  • 位运算非操作符(~)
  • 算术否定操作符(-)
  • 算术减法操作符(-)
  • 算术乘法操作符(*)
  • 算术除法操作符(/)

将数组视为整数

当与以下操作符一起使用时,数组被视为整数。空数组(没有元素)被视为int(0),非空数组被视为int(1)。

  • 逻辑非(!)对空数组返回true,当操作数数组具有一个或多个元素时返回false。
  • 位与(&&)如果两个操作数都是非空的,则返回1;如果一个或两个操作数都是空的,则返回0。
  • 位或(|)如果两个操作数都是空的,则返回0;否则返回1。
  • 位异或(^)如果两个数组都是空的或都是非空的,则返回0。如果其中一个数组为空,则返回1。
  • 使用左移操作符(<<)将数组向左移动n步。
  • 右移操作符(>>)的行为与左移类似,只是它向右移动。
  • 模(%)如果两个数组都是非空的,则返回true。如果第二个数组为空,则发出“除以零”错误。如果第一个数组为空,则返回0(0 % 1的结果)。
  • 逻辑与(&&和AND)如果任何数组为空,则返回false。如果两个数组都是非空的,则返回true。
  • 逻辑或(||和OR)如果任何操作数数组是非空的,则返回true。如果两个数组都是空的,则返回false。
  • 如果两个数组都是空的或都是非空的,则逻辑异或(XOR)返回false。否则,如果其中一个数组为空,则返回true。
  • 将数组强制转换为bool,如果数组为空,则返回false,否则返回true。

将数组视为字符串

连接两个数组时,字符串连接操作符(.)将每个数组视为字符串“Array”并连接这些字符串。

<?php
$array1 = array('a', 'b', 'c');
$array2 = array('d', 'e', 'f', 'g', 'h', 'i');
print_r($array1 + $array2);
print_r($array2 + $array1);
?>
登录后复制
登录后复制
登录后复制
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => g
    [4] => h
    [5] => i
)
Array
(
    [0] => d
    [1] => e
    [2] => f
    [3] => g
    [4] => h
    [5] => i
)</code>
登录后复制
登录后复制
登录后复制

无效

增量/减量操作符( 和--)对数组没有影响。

<?php
$array1 = array('0' => 'a', '1' => 'b', '2' => 'c', '3' => 'd');
$array2 = array(false => 'e', 1 => 'f', 2 => 'g', 3 => 'h', 4 => 'i');
print_r($array1 + $array2);
?>
登录后复制
登录后复制
登录后复制
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => i
)</code>
登录后复制
登录后复制
登录后复制

结论

关于PHP操作符在与数组一起使用时的实际文档很少,但要了解更多信息,您可以查看数组操作符页面中用户提交的评论。欢迎在此处提出您的问题和评论,我将很乐意进一步解释。

图片来自Fotolia

PHP数组操作符常见问题解答 (FAQs)

PHP中有哪些不同类型的数组操作符?

PHP支持几种类型的数组操作符,包括并集( )、相等性(==)、恒等性(===)、不相等性(!= 或 <>)和非恒等性(!==)。这些操作符每个执行不同的功能。例如,并集操作符( )组合数组,相等性操作符(==)检查两个数组是否相等,而恒等性操作符(===)检查两个数组是否相同。

PHP中并集( )操作符是如何工作的?

PHP中的并集( )操作符将两个数组合并成一个。它采用数组的并集,这意味着它返回一个包含两个数组中所有元素的数组。如果数组具有相同的字符串键,则将使用第一个数组中的值,而第二个数组中匹配键的值将被忽略。

相等性(==)和恒等性(===)操作符有什么区别?

相等性(==)操作符检查两个数组是否具有相同的键/值对,而不管它们的顺序或数据类型如何。另一方面,恒等性(===)操作符检查两个数组是否具有相同顺序和相同数据类型的相同的键/值对。

PHP中不相等性(!= 或 <>)操作符是如何工作的?

PHP中的不相等操作符,用!=或<>表示,检查两个数组是否不相等。如果数组不相等,则返回true;如果数组相等,则返回false。

PHP中的非恒等性(!==)操作符的作用是什么?

PHP中的非恒等性(!==)操作符检查两个数组是否不相同。如果数组不相同,则返回true;如果数组相同,则返回false。

可以组合PHP中的数组操作符吗?

是的,您可以组合PHP中的数组操作符以执行更复杂的操作。但是,这样做时应小心,以避免出现意外结果。始终确保组合的操作符在代码的上下文中具有逻辑意义。

如何使用数组操作符检查数组是否包含特定值?

您可以使用PHP中的in_array()函数来检查数组是否包含特定值。如果在数组中找到该值,则此函数返回true;否则返回false。

如何从PHP数组中删除特定值?

您可以使用PHP中的array_diff()函数从数组中删除特定值。此函数将数组中的值与另一个数组中的值进行比较,并返回差异。

如何在PHP中对数组进行排序?

PHP提供多个函数来对数组进行排序,包括sort()、asort()、ksort()和usort()。这些函数每个都以不同的方式对数组进行排序,因此您应该选择最适合您需求的函数。

如何反转PHP中数组的顺序?

您可以使用PHP中的array_reverse()函数来反转数组的顺序。此函数返回一个元素顺序反转的新数组。

以上是PHP主| PHP中的阵列操作员:有趣但口语不太说话的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试? 在PHPStorm中如何进行CLI模式的调试? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章讨论了框架中的基本安全功能,以防止漏洞,包括输入验证,身份验证和常规更新。

如何在系统重启后自动设置unixsocket的权限? 如何在系统重启后自动设置unixsocket的权限? Mar 31, 2025 pm 11:54 PM

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

See all articles