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

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

William Shakespeare
William Shakespeare原创
2025-02-23 09:04:10841浏览

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

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

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

关键要点

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

数组操作符

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

数组并集

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

<code class="language-php"><?php
$array1 = array('a', 'b', 'c');
$array2 = array('d', 'e', 'f', 'g', 'h', 'i');
print_r($array1 + $array2);
print_r($array2 + $array1);
?></code>
<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中,因此它的所有元素都被忽略。宽松匹配行为可能会给你带来完全出乎意料的结果,但也为优化和宽松编码提供了令人兴奋的机会。

<code class="language-php"><?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>
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => i
)</code>

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

<code class="language-php"><?php
$array1 = array('a', 'b', 'c');
$array2 = array('d', 'e', 'f', 'g', 'h', 'i');
print_r($array1 + $array2);
print_r($array2 + $array1);
?></code>
<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。它宽松地匹配值和键,并且忽略元素的顺序。

<code class="language-php"><?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>
<code>Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => i
)</code>

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

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

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

<code class="language-php"><?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>
<code>bool(true)</code>

数组恒等性

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

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

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

<code class="language-php"><?php
$array1 = array(1, 2);
$array2 = array(2, 1);
var_dump($array1 == $array2);
?></code>
<code>bool(false)</code>
<code class="language-php"><?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>
<code>bool(false)</code>
<code class="language-php"><?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>
<code>bool(true)</code>

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

<code class="language-php"><?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>
<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”并连接这些字符串。

<code class="language-php"><?php
$array1 = array('a', 'b', 'c');
$array2 = array('d', 'e', 'f', 'g', 'h', 'i');
print_r($array1 + $array2);
print_r($array2 + $array1);
?></code>
<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>

无效

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

<code class="language-php"><?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>
<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