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,並避免使用

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,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
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器