PHP数组操作符详解:鲜为人知的技巧
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。
- 使用左移操作符(
- 右移操作符(>>)的行为与左移类似,只是它向右移动。
- 模(%)如果两个数组都是非空的,则返回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中文网其他相关文章!

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

是的,优化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)优化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,并避免使用

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版
中文版,非常好用

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载
最流行的的开源编辑器