搜索
首页后端开发php教程PHP主| PHP中的阵列操作员:有趣但口语不太说话

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。
  • 使用左移操作符(
  • 右移操作符(>>)的行为与左移类似,只是它向右移动。
  • 模(%)如果两个数组都是非空的,则返回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
高流量网站的PHP性能调整高流量网站的PHP性能调整May 14, 2025 am 12:13 AM

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

PHP中的依赖注入:初学者的代码示例PHP中的依赖注入:初学者的代码示例May 14, 2025 am 12:08 AM

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

PHP性能:是否可以优化应用程序?PHP性能:是否可以优化应用程序?May 14, 2025 am 12:04 AM

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

PHP性能优化:最终指南PHP性能优化:最终指南May 14, 2025 am 12:02 AM

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

PHP依赖注入容器:快速启动PHP依赖注入容器:快速启动May 13, 2025 am 12:11 AM

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

PHP中的依赖注入与服务定位器PHP中的依赖注入与服务定位器May 13, 2025 am 12:10 AM

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

PHP性能优化策略。PHP性能优化策略。May 13, 2025 am 12:06 AM

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

PHP电子邮件验证:确保正确发送电子邮件PHP电子邮件验证:确保正确发送电子邮件May 13, 2025 am 12:06 AM

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

See all articles

热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

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

热门文章

热工具

螳螂BT

螳螂BT

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

SecLists

SecLists

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

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器