首頁 > 後端開發 > php教程 > PHP主| PHP中的陣列操作員:有趣但口語不太說話

PHP主| PHP中的陣列操作員:有趣但口語不太說話

William Shakespeare
發布: 2025-02-23 09:04:10
原創
847 人瀏覽過

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。
  • 使用左移操作符(<<)將數組向左移動n步。
  • 右移操作符(>>)的行為與左移類似,只是它向右移動。
  • 模(%)如果兩個數組都是非空的,則返回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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板