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)。
連接兩個數組時,字符串連接操作符(.)將每個數組視為字符串“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支持幾種類型的數組操作符,包括並集( )、相等性(==)、恆等性(===)、不相等性(!= 或)和非恆等性(!==)。這些操作符每個執行不同的功能。例如,並集操作符( )組合數組,相等性操作符(==)檢查兩個數組是否相等,而恆等性操作符(===)檢查兩個數組是否相同。
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中文網其他相關文章!