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)。
连接两个数组时,字符串连接操作符(.)将每个数组视为字符串“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支持几种类型的数组操作符,包括并集( )、相等性(==)、恒等性(===)、不相等性(!= 或 <>)和非恒等性(!==)。这些操作符每个执行不同的功能。例如,并集操作符( )组合数组,相等性操作符(==)检查两个数组是否相等,而恒等性操作符(===)检查两个数组是否相同。
PHP中的并集( )操作符将两个数组合并成一个。它采用数组的并集,这意味着它返回一个包含两个数组中所有元素的数组。如果数组具有相同的字符串键,则将使用第一个数组中的值,而第二个数组中匹配键的值将被忽略。
相等性(==)操作符检查两个数组是否具有相同的键/值对,而不管它们的顺序或数据类型如何。另一方面,恒等性(===)操作符检查两个数组是否具有相同顺序和相同数据类型的相同的键/值对。
PHP中的不相等操作符,用!=或<>表示,检查两个数组是否不相等。如果数组不相等,则返回true;如果数组相等,则返回false。
PHP中的非恒等性(!==)操作符检查两个数组是否不相同。如果数组不相同,则返回true;如果数组相同,则返回false。
是的,您可以组合PHP中的数组操作符以执行更复杂的操作。但是,这样做时应小心,以避免出现意外结果。始终确保组合的操作符在代码的上下文中具有逻辑意义。
您可以使用PHP中的in_array()函数来检查数组是否包含特定值。如果在数组中找到该值,则此函数返回true;否则返回false。
您可以使用PHP中的array_diff()函数从数组中删除特定值。此函数将数组中的值与另一个数组中的值进行比较,并返回差异。
PHP提供多个函数来对数组进行排序,包括sort()、asort()、ksort()和usort()。这些函数每个都以不同的方式对数组进行排序,因此您应该选择最适合您需求的函数。
您可以使用PHP中的array_reverse()函数来反转数组的顺序。此函数返回一个元素顺序反转的新数组。
以上是PHP主| PHP中的阵列操作员:有趣但口语不太说话的详细内容。更多信息请关注PHP中文网其他相关文章!