PHP 中的 array 實(shí)際上是一個有序映射。映射是一種把 values 關(guān)聯(lián)到 keys 的類型。此類型針對多種不同用途進(jìn)行了優(yōu)化; 它可以被視為數(shù)組、列表(向量)、哈希表(映射的實(shí)現(xiàn))、字典、集合、堆棧、隊(duì)列等等。 由于 array 的值可以是其它 array 所以樹形結(jié)構(gòu)和多維 array 也是允許的。
解釋這些數(shù)據(jù)結(jié)構(gòu)超出了本手冊的范圍,但對每種結(jié)構(gòu)至少會提供一個例子。 要得到這些數(shù)據(jù)結(jié)構(gòu)的更多信息,建議參考有關(guān)此廣闊主題的其它文獻(xiàn)。
可以用 array() 語言結(jié)構(gòu)來新建一個 array。它接受任意數(shù)量用逗號分隔的
鍵(key) => 值(value)
對。
array( key => value, key2 => value2, key3 => value3, ... )
最后一個數(shù)組單元之后的逗號可以省略。通常用于單行數(shù)組定義中,例如常用
array(1, 2)
而不是
array(1, 2, )
。對多行數(shù)組定義通常保留最后一個逗號,這樣要添加一個新單元時更方便。
注意:
可以用短數(shù)組語法
[]
替代array()
。
示例 #1 一個簡單數(shù)組
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 使用短數(shù)組語法
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
key 可以是 integer 或者 string。value 可以是任意類型。
此外 key 會有如下的強(qiáng)制轉(zhuǎn)換:
+
號,否則將被轉(zhuǎn)換為 int 類型。例如鍵名 "8"
實(shí)際會被儲存為
8
。另外, "08"
不會被強(qiáng)制轉(zhuǎn)換,因?yàn)樗皇且粋€有效的十進(jìn)制整數(shù)。
8.7
實(shí)際會被儲存為 8
。
true
實(shí)際會被儲存為 1
而鍵名 false
會被儲存為 0
。
null
實(shí)際會被儲存為 ""
。
Illegal offset type
。
如果在數(shù)組定義時多個元素都使用相同鍵名,那么只有最后一個會被使用,其它的元素都會被覆蓋。
示例 #2 類型轉(zhuǎn)換與覆蓋的示例
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
以上例程會輸出:
array(1) { [1]=> string(1) "d" }
上例中所有的鍵名都被強(qiáng)制轉(zhuǎn)換為 1
,則每一個新單元都會覆蓋前一個的值,最后剩下的只有一個
"d"
。
PHP 數(shù)組可以同時含有 int 和 string 類型的鍵名,因?yàn)? PHP 實(shí)際并不區(qū)分索引數(shù)組和關(guān)聯(lián)數(shù)組。
示例 #3 混合 int 和 string 鍵名
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
?>
以上例程會輸出:
array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) }
key 為可選項(xiàng)。如果未指定,PHP 將自動使用之前用過的最大 int 鍵名加上 1 作為新的鍵名。
示例 #4 沒有鍵名的索引數(shù)組
<?php
$array = array("foo", "bar", "hello", "world");
var_dump($array);
?>
以上例程會輸出:
array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" }
還可以只對某些單元指定鍵名而對其它的空置:
示例 #5 僅對部分單元指定鍵名
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
以上例程會輸出:
array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d" }
可以看到最后一個值 "d"
被自動賦予了鍵名
7
。這是由于之前最大的整數(shù)鍵名是 6
。
示例 #6 復(fù)雜類型轉(zhuǎn)換和覆蓋的例子
這個例子包括鍵名類型轉(zhuǎn)換和元素覆蓋的所有變化。
<?php
$array = array(
1 => 'a',
'1' => 'b', // 值 "a" 會被 "b" 覆蓋
1.5 => 'c', // 值 "b" 會被 "c" 覆蓋
-1 => 'd',
'01' => 'e', // 由于這不是整數(shù)字符串,因此不會覆蓋鍵名 1
'1.5' => 'f', // 由于這不是整數(shù)字符串,因此不會覆蓋鍵名 1
true => 'g', // 值 "c" 會被 "g" 覆蓋
false => 'h',
'' => 'i',
null => 'j', // 值 "i" 會被 "j" 覆蓋
'k', // 值 “k” 的鍵名被分配為 2。這是因?yàn)橹白畲蟮恼麛?shù)鍵是 1
2 => 'l', // 值 "k" 會被 "l" 覆蓋
);
var_dump($array);
?>
以上例程會輸出:
array(7) { [1]=> string(1) "g" [-1]=> string(1) "d" ["01"]=> string(1) "e" ["1.5"]=> string(1) "f" [0]=> string(1) "h" [""]=> string(1) "j" [2]=> string(1) "l" }
數(shù)組單元可以通過 array[key]
語法來訪問。
示例 #7 訪問數(shù)組單元
<?php
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>
以上例程會輸出:
string(3) "bar" int(24) string(3) "foo"
注意:
在 PHP 8.0.0 之前,方括號和花括號可以互換使用來訪問數(shù)組單元(例如
$array[42]
和$array{42}
在上例中效果相同)。 花括號語法在 PHP 7.4.0 中已棄用,在 PHP 8.0.0 中不再支持。
示例 #8 數(shù)組解引用
<?php
function getArray() {
return array(1, 2, 3);
}
$secondElement = getArray()[1];
// 或
list(, $secondElement) = getArray();
?>
注意:
試圖訪問一個未定義的數(shù)組鍵名與訪問任何未定義變量一樣:會導(dǎo)致
E_NOTICE
級別錯誤信息,其結(jié)果為null
。
注意:
數(shù)組解引用非 string 的標(biāo)量值會產(chǎn)生
null
。 在 PHP 7.4.0 之前,它不會發(fā)出錯誤消息。 從 PHP 7.4.0 開始,這個問題產(chǎn)生E_NOTICE
; 從 PHP 8.0.0 開始,這個問題產(chǎn)生E_WARNING
。
可以通過明示地設(shè)定其中的值來修改現(xiàn)有的 array 。
這是通過在方括號內(nèi)指定鍵名來給 array
賦值實(shí)現(xiàn)的。也可以省略鍵名,在這種情況下給變量名加上一對空的方括號([]
)。
$arr[key] = value; $arr[] = value; // key 可以是 int 或 string // value 可以是任意類型的值
如果 $arr 不存在或者設(shè)置為 null
或者 false
,將會新建它,這也是另一種創(chuàng)建
array 的方法。不過并不鼓勵這樣做,因?yàn)槿绻? $arr 已經(jīng)包含有值(例如來自請求變量的 string)則此值會保留而
[]
實(shí)際上代表著字符串訪問運(yùn)算符。初始化變量的最好方式是直接給其賦值。
注意: 從 PHP 7.1.0 起,對字符串應(yīng)用空索引操作符會拋出致命錯誤。以前,字符串被靜默地轉(zhuǎn)換為數(shù)組。
注意: 從 PHP 8.1.0 起,棄用從
false
值中創(chuàng)建一個新數(shù)組。 但仍然允許從null
或者未定義的變量中創(chuàng)建新數(shù)組。
要修改某個值,通過其鍵名給該單元賦一個新值。要刪除某鍵值對,對其調(diào)用 unset() 函數(shù)。
<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // 這與 $arr[13] = 56 相同;
// 在腳本的這一點(diǎn)上
$arr["x"] = 42; // 添加一個新元素
// 鍵名使用 "x"
unset($arr[5]); // 從數(shù)組中刪除元素
unset($arr); // 刪除整個數(shù)組
?>
注意:
如上所述,如果給出方括號但沒有指定鍵名,則取當(dāng)前最大 int 索引值,新的鍵名將是該值加上 1(但是最小為 0)。如果當(dāng)前還沒有 int 索引,則鍵名將為
0
。注意這里所使用的最大整數(shù)鍵名目前不需要存在于 array 中。 它只要在上次 array 重新生成索引后曾經(jīng)存在于 array 就行了。以下面的例子來說明:
<?php
// 創(chuàng)建一個簡單的數(shù)組
$array = array(1, 2, 3, 4, 5);
print_r($array);
// 現(xiàn)在刪除其中的所有元素,但保持?jǐn)?shù)組本身不變:
foreach ($array as $i => $value) {
unset($array[$i]);
}
print_r($array);
// 添加一個單元(注意新的鍵名是 5,而不是你可能以為的 0)
$array[] = 6;
print_r($array);
// 重新索引:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>以上例程會輸出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) Array ( ) Array ( [5] => 6 ) Array ( [0] => 6 [1] => 7 )
有很多操作數(shù)組的函數(shù),參見 數(shù)組函數(shù) 一節(jié)。
注意:
unset() 函數(shù)允許刪除 array 中的某個鍵。但要注意數(shù)組將不會重建索引。如果需要刪除后重建索引,可以用 array_values() 函數(shù)重建 array 索引。
<?php
$a = array(1 => 'one', 2 => 'two', 3 => 'three');
unset($a[2]);
/* 該數(shù)組將被定義為
$a = array(1 => 'one', 3 => 'three');
而不是
$a = array(1 => 'one', 2 =>'three');
*/
$b = array_values($a);
// 現(xiàn)在 $b 是 array(0 => 'one', 1 =>'three')
?>
foreach 控制結(jié)構(gòu)是專門用于 array的。它提供了一個簡單的方法來遍歷 array。
$foo[bar]
錯了?
應(yīng)該始終在用字符串表示的數(shù)組索引上加上引號。例如用
$foo['bar']
而不是
$foo[bar]
。但是為什么呢?可能在老的腳本中見過如下語法:
<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// 及其它
?>
這樣是錯的,但可以正常運(yùn)行。那么為什么錯了呢?原因是此代碼中有一個未定義的常量(
bar
)而不是 string('bar'
-注意引號)。而
PHP 可能會在以后定義此常量,不幸的是你的代碼中有同樣的名字。它能運(yùn)行,是因?yàn)? PHP 自動將裸字符串(沒有引號的 string
且不對應(yīng)于任何已知符號)轉(zhuǎn)換成一個其值為該裸 string 的
string。例如,如果沒有常量定義為
bar
,那么PHP 將在
string 中替代為 'bar'
并使用之。
將未定義的常量當(dāng)作裸字符串的回退會觸發(fā) E_NOTICE
級別錯誤。
從 PHP 7.2.0 起已廢棄,并觸發(fā) E_WARNING
級別錯誤。
從 PHP 8.0.0 起被移除,并觸發(fā) Error 異常。
注意: 這并不意味著總是給鍵名加上引號。用不著給鍵名為 常量 或 變量 的加上引號,否則會使 PHP 不能解析它們。
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('html_errors', false);
// 簡單數(shù)組:
$array = array(1, 2);
$count = count($array);
for ($i = 0; $i < $count; $i++) {
echo "\n檢查 $i: \n";
echo "壞的: " . $array['$i'] . "\n";
echo "好的: " . $array[$i] . "\n";
echo "壞的: {$array['$i']}\n";
echo "好的: {$array[$i]}\n";
}
?>以上例程會輸出:
檢查 0: Notice: Undefined index: $i in /path/to/script.html on line 9 壞的: 好的: 1 Notice: Undefined index: $i in /path/to/script.html on line 11 壞的: 好的: 1 檢查 1: Notice: Undefined index: $i in /path/to/script.html on line 9 壞的: 好的: 2 Notice: Undefined index: $i in /path/to/script.html on line 11 壞的: 好的: 2
演示此行為的更多例子:
<?php
// 顯示所有錯誤
error_reporting(E_ALL);
$arr = array('fruit' => 'apple', 'veggie' => 'carrot');
// 正確的
print $arr['fruit']; // apple
print $arr['veggie']; // carrot
// 不正確的。 這可以工作,但也會拋出一個 E_NOTICE 級別的 PHP 錯誤,因?yàn)?br>// 未定義名為 apple 的常量
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit]; // apple
// 這定義了一個常量來演示正在發(fā)生的事情。 值 'veggie'
// 被分配給一個名為 fruit 的常量。
define('fruit', 'veggie');
// 注意這里的區(qū)別
print $arr['fruit']; // apple
print $arr[fruit]; // carrot
// 以下是可以的,因?yàn)樗谧址小?br>// 不會在字符串中查找常量,因此此處不會出現(xiàn) E_NOTICE
print "Hello $arr[fruit]"; // Hello apple
// 有一個例外:字符串中花括號圍繞的數(shù)組中常量可以被解釋
//
print "Hello {$arr[fruit]}"; // Hello carrot
print "Hello {$arr['fruit']}"; // Hello apple
// 這將不起作用,并會導(dǎo)致解析錯誤,例如:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// 這當(dāng)然也適用于在字符串中使用超全局變量
print "Hello $arr['fruit']";
print "Hello $_GET['foo']";
// 串聯(lián)是另一種選擇
print "Hello " . $arr['fruit']; // Hello apple
?>
當(dāng)打開 error_reporting 來顯示
E_NOTICE
級別的錯誤(將其設(shè)為
E_ALL
)時將看到這些錯誤。默認(rèn)情況下
error_reporting
被關(guān)閉不顯示這些。
和在 語法
一節(jié)中規(guī)定的一樣,在方括號([
” 和
“]
”)之間必須有一個表達(dá)式。這意味著可以這樣寫:
<?php
echo $arr[somefunc($bar)];
?>
這是一個用函數(shù)返回值作為數(shù)組索引的例子。PHP 也可以用已知常量,可能之前已經(jīng)見過:
<?php
$error_descriptions[E_ERROR] = "A fatal error has occurred";
$error_descriptions[E_WARNING] = "PHP issued a warning";
$error_descriptions[E_NOTICE] = "This is just an informal notice";
?>
注意 E_ERROR
也是個合法的標(biāo)識符,就和第一個例子中的
bar
一樣。但是上一個例子實(shí)際上和如下寫法是一樣的:
<?php
$error_descriptions[1] = "A fatal error has occurred";
$error_descriptions[2] = "PHP issued a warning";
$error_descriptions[8] = "This is just an informal notice";
?>
因?yàn)?E_ERROR
等于 1
,等等。
也許有一天,PHP 開發(fā)小組可能會想新增一個常量或者關(guān)鍵字,或者用戶可能希望以后在自己的程序中引入新的常量,那就有麻煩了。例如已經(jīng)不能這樣用
empty
和 default
這兩個詞了,因?yàn)樗麄兪? 保留關(guān)鍵字。
注意: 重申一次,在雙引號字符串中,不給索引加上引號是合法的因此
"$foo[bar]"
是合法的(“合法”的原文為 valid。在實(shí)際測試中,這么做確實(shí)可以訪問數(shù)組的該元素,但是會報(bào)一個常量未定義的 notice。無論如何,強(qiáng)烈建議不要使用 $foo[bar]這樣的寫法,而要使用 $foo['bar'] 來訪問數(shù)組中元素。--haohappy 注)。至于為什么參見以上的例子和 字符串中的變量解析 中的解釋。
對于任意 int,float,
string,bool 和 resource 類型,如果將一個值轉(zhuǎn)換為
array,將得到一個僅有一個元素的數(shù)組,其下標(biāo)為
0,該元素即為此標(biāo)量的值。換句話說,(array)$scalarValue
與
array($scalarValue)
完全一樣。
如果將 object 類型轉(zhuǎn)換為
array,則結(jié)果為一個數(shù)組,其單元為該對象的屬性。鍵名將為成員變量名,不過有幾點(diǎn)例外:整數(shù)屬性不可訪問;
私有變量前會加上類名作前綴;保護(hù)變量前會加上一個 '*' 做前綴。這些前綴的前后都各有一個 NUL
字節(jié)。
未初始化的類型屬性將會被丟棄。
<?php
class A {
private $B;
protected $C;
public $D;
function __construct()
{
$this->{1} = null;
}
}
var_export((array) new A());
?>
以上例程會輸出:
array ( '' . "\0" . 'A' . "\0" . 'B' => NULL, '' . "\0" . '*' . "\0" . 'C' => NULL, 'D' => NULL, 1 => NULL, )
這些 NUL
會導(dǎo)致一些意想不到的行為:
<?php
class A {
private $A; // 將變?yōu)?nbsp;'\0A\0A'
}
class B extends A {
private $A; // 將變?yōu)?nbsp;'\0B\0A'
public $AA; // 將變?yōu)?nbsp;'AA'
}
var_dump((array) new B());
?>
以上例程會輸出:
array(3) { ["BA"]=> NULL ["AA"]=> NULL ["AA"]=> NULL }
上例會有兩個鍵名為 'AA',不過其中一個實(shí)際上是 '\0A\0A'。
將 null
轉(zhuǎn)換為 array 會得到一個空的數(shù)組。
可以用 array_diff() 函數(shù)和 數(shù)組運(yùn)算符 來比較數(shù)組。
在 array 定義時,用 ...
前綴的一個 array 可以被展開到當(dāng)前位置。
只有實(shí)現(xiàn)了 Traversable 的數(shù)組和對象才能被展開。
PHP 7.4.0 開始可以使用 ...
解包 array。
它可以多次使用,在 ...
操作符前后都可以添加常規(guī)元素:
示例 #9 簡單的數(shù)組解包
<?php
// 使用簡短的數(shù)組語法。
// 亦可用于 array() 語法
$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = [...$arr1, ...$arr2, 111]; //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
function getArr() {
return ['a', 'b'];
}
$arr6 = [...getArr(), 'c' => 'd']; //['a', 'b', 'c' => 'd']
?>
...
操作符解包 array 時也遵守函數(shù) array_merge() 的語義。
也就是說,key 為字符時,后面的字符鍵會覆蓋之前的字符鍵;key 為 integer 時則會重新編號:
示例 #10 重復(fù) key 的數(shù)組解包
<?php
// string key
$arr1 = ["a" => 1];
$arr2 = ["a" => 2];
$arr3 = ["a" => 0, ...$arr1, ...$arr2];
var_dump($arr3); // ["a" => 2]
// integer key
$arr4 = [1, 2, 3];
$arr5 = [4, 5, 6];
$arr6 = [...$arr4, ...$arr5];
var_dump($arr6); // [1, 2, 3, 4, 5, 6]
// 即 [0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6]
// 也就是原始的 integer key 不再保留
?>
注意:
既不是 integer 也不是 string 的 key 會拋出 TypeError。 這類 key 只能通過 Traversable 對象生成。
注意:
在 PHP 8.1 之前,帶有 string 鍵的 array 無法解包:
<?php
$arr1 = [1, 2, 3];
$arr2 = ['a' => 4];
$arr3 = [...$arr1, ...$arr2];
// Fatal error: Uncaught Error: Cannot unpack array with string keys in example.php:5
$arr4 = [1, 2, 3];
$arr5 = [4, 5];
$arr6 = [...$arr4, ...$arr5]; // works. [1, 2, 3, 4, 5]
?>
PHP 中的數(shù)組類型有非常多的用途。以下是一些示例:
<?php
// This:
$a = array( 'color' => 'red',
'taste' => 'sweet',
'shape' => 'round',
'name' => 'apple',
4 // 鍵名為 0
);
$b = array('a', 'b', 'c');
// . . .完全等同于:
$a = array();
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name'] = 'apple';
$a[] = 4; // 鍵名為 0
$b = array();
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';
// 執(zhí)行上述代碼后,數(shù)組 $a 將是
// array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round',
// 'name' => 'apple', 0 => 4), 數(shù)組 $b 將是
// array(0 => 'a', 1 => 'b', 2 => 'c'), 或簡單的 array('a', 'b', 'c').
?>
示例 #11 使用 array()
<?php
// Array as (property-)map
$map = array( 'version' => 4,
'OS' => 'Linux',
'lang' => 'english',
'short_tags' => true
);
// 嚴(yán)格的數(shù)字鍵
$array = array( 7,
8,
0,
156,
-10
);
// 這相當(dāng)于 array(0 => 7, 1 => 8, ...)
$switching = array( 10, // key = 0
5 => 6,
3 => 7,
'a' => 4,
11, // key = 6 (整數(shù)索引的最大值為 5)
'8' => 2, // key = 8 (整數(shù)!)
'02' => 77, // key = '02'
0 => 12 // 值 10 被 12 覆蓋
);
// 空數(shù)組
$empty = array();
?>
示例 #12 集合
<?php
$colors = array('red', 'blue', 'green', 'yellow');
foreach ($colors as $color) {
echo "Do you like $color?\n";
}
?>
以上例程會輸出:
Do you like red? Do you like blue? Do you like green? Do you like yellow?
可以通過引用傳遞 array 的值來直接更改數(shù)組的值。
示例 #13 在循環(huán)中改變單元
<?php
foreach ($colors as &$color) {
$color = strtoupper($color);
}
unset($color); /* 確保后面對
$color 的寫入不會修改最后一個數(shù)組元素 */
print_r($colors);
?>
以上例程會輸出:
Array ( [0] => RED [1] => BLUE [2] => GREEN [3] => YELLOW )
本例生成一個下標(biāo)從 1 開始的數(shù)組。
示例 #14 下標(biāo)從 1 開始的數(shù)組
<?php
$firstquarter = array(1 => 'January', 'February', 'March');
print_r($firstquarter);
?>
以上例程會輸出:
Array ( [1] => 'January' [2] => 'February' [3] => 'March' )
示例 #15 填充數(shù)組
<?php
// 把指定目錄中的所有項(xiàng)填充到數(shù)組
$handle = opendir('.');
while (false !== ($file = readdir($handle))) {
$files[] = $file;
}
closedir($handle);
?>
Array 是有序的。也可以使用不同的排序函數(shù)來改變順序。更多信息參見 數(shù)組函數(shù)??梢杂? count() 函數(shù)來統(tǒng)計(jì)出 array 中元素的個數(shù)。
示例 #16 數(shù)組排序
<?php
sort($files);
print_r($files);
?>
因?yàn)?array 中的值可以為任意值,也可是另一個 array。這樣可以產(chǎn)生遞歸或多維 array。
示例 #17 遞歸和多維數(shù)組
<?php
$fruits = array ( "fruits" => array ( "a" => "orange",
"b" => "banana",
"c" => "apple"
),
"numbers" => array ( 1,
2,
3,
4,
5,
6
),
"holes" => array ( "first",
5 => "second",
"third"
)
);
// 處理上面數(shù)組中的值的一些例子
echo $fruits["holes"][5]; // 打印 "second"
echo $fruits["fruits"]["a"]; // 打印 "orange"
unset($fruits["holes"][0]); // 刪除 "first"
// 創(chuàng)建一個新的多維數(shù)組
$juices["apple"]["green"] = "good";
?>
Array 的賦值總是會涉及到值的拷貝。使用 引用運(yùn)算符 通過引用來拷貝 array。
<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 已更改,
// $arr1 仍然是 array(2, 3)
$arr3 = &$arr1;
$arr3[] = 4; // 現(xiàn)在 $arr1 和 $arr3 是一樣的
?>