array_flip(array);
//傳遞一個陣列引數,對該陣列的鍵、值進行翻轉
例如:
$a = array( 'a', 'b', 'c' ); print_r(array_flip($a)); //輸出為: Array ( [a] => 0 [b] => 1 [c] => 2 ) //需要注意的是: array_flip(): Can only flip STRING and INTEGER values
array_merge (array1,array2[,aray3...])
//對兩個或多個陣列進行合併(傳遞一個陣列引數也是可以的)
需要注意的是:
- 如果陣列中沒有鍵名,則不管他們的值的交集存不存在重複,最終結果都會以下標為0開始的陣列返回,值的順序依次為array1、array2..
- 如果陣列中設定有鍵名,且鍵名存在重複,則該鍵值為最後一個鍵名對應的值(覆蓋前面)
- 如果陣列是指定數字索引,則結果的鍵名會以從0開始的陣列重新進行索引
- 如果陣列中的鍵名存在以上的組合情況,則以顯式指定鍵名的優先
- 總結一點是,他要保證合併後的陣列索引不能重複,若沒指定鍵名或指定鍵名為數字,則結果按從0開始的數字重新進行,若指定了非數字索引,則他會保留之前的索引,但如果存在多個,則只保留最後一個
幾個例子:
//沒有指定索引 $a = array( 'a', 'b', ); $b = array( 'a', 'b', ); $arr = array_merge($a,$b); //輸出: Array ( [0] => a [1] => b [2] => a [3] => b ) //======================= //顯式指定數字鍵名 $a = array( 3=>'a', 4=>'b', ); $b = array( 1=>'a', 2=>'b', ); $arr = array_merge($a,$b); //輸出: Array ( [0] => a [1] => b [2] => a [3] => b ) //======================= //顯式指定數字鍵名和無索引混合 $a = array( 3=>'a', 'b', ); $b = array( 'a', 2=>'b', ); $arr = array_merge($a,$b); //輸出: Array ( [0] => a [1] => b [2] => a [3] => b ) //======================= //顯式指定非數字索引1 $a = array( 'a'=>1, 'b', ); $b = array( 'a', 'b', ); $arr = array_merge($a,$b); //輸出: Array ( [a] => 1 [0] => b [1] => a [2] => b ) //======================= //顯式指定非數字索引2 $a = array( 'a'=>1, 'b'=>2, ); $b = array( 'a', 'b'=>22, ); $arr = array_merge($a,$b); //輸出: Array ( [a] => 1 [b] => 22 [0] => a )
其他的幾種組合例子就不貼上去了……
array1+array2
這種寫法其實沒用過,研究了一把,他其實也是用來合併陣列操作。用法和array_merge有一定的區別。
- 若陣列沒有指定索引,則他會先把array1的先賦值給結果,假設array1長度為3,array2長度為5,則他會把array2[3]、array2[4]追加到結果後面,array2[0-2]直接忽略
- 若為陣列指定了索引,不管為數字還是非數字索引,最終結果都會保留指定的索引,若兩個陣列存在重複的索引,則以第一個為最終結果(覆蓋後面)
- 指定索引和無索引混合的情況下,先看array1,若前幾個為無索引,比如前3個沒有指定,則還按照規則1,忽略掉array2中的前3個。若array1[0]為顯式指定索引,則不會忽略array2中的陣列元素,除非存在指定相同的索引,遵循規則2
幾個例子:
//沒有指定索引 $a = array( 'a', 'b', ); $b = array( 'c', 'd', 'e' ); $arr = $a + $b; //輸出: Array ( [0] => a [1] => b [2] => e ) //======================= //指定數字索引 $a = array( 1=>'a', 2=>'b', ); $b = array( 4=>'c', 7=>'d' ); $arr = $a + $b; //輸出: Array ( [1] => a [2] => b [4] => c [7] => d ) //======================= //指定索引,存在重複 $a = array( 'a'=>11, 'b'=>22, ); $b = array( 'c'=>33, 'd'=>44, 'a'=>55 ); $arr = $a + $b; //輸出: Array ( [a] => 11 [b] => 22 [c] => 33 [d] => 44 ) //======================= //混合指定索引和無索引1 $a = array( 'a', 2=>'b', ); $b = array( 'c', 'd', 10=>'a', 4=>22 ); $arr = $a + $b; //輸出: Array ( [0] => a [2] => b [1] => d [10] => a [4] => 22 ) //======================= //混合指定索引和無索引2 $a = array( 2=>'b', 'a', ); $b = array( 'c', 'd', 10=>'a', 4=>22 ); $arr = $a + $b; //輸出: Array ( [2] => b [3] => a [0] => c [1] => d [10] => a [4] => 22 )
array_flip和array+array的搭配使用(去掉兩個陣列中重複的值):
$a = array( 'a', 'b', 'c' ); $b = array( 'a1', 'b1', 'c' ); $arr = array_flip($a) + array_flip($b); print_r(array_keys($arr)); //輸出: Array ( [0] => a [1] => b [2] => c [3] => a1 [4] => b1 )