PHP array_flip() array_merge() array+array的使用總結


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...])

//對兩個或多個數組進行合並(傳遞一個數組參數也是可以的)

需要注意的是:

  1. 如果數組中沒有鍵名,則不管他們的值的交集存不存在重復,最終結果都會以下標為0開始的數組返回,值的順序依次為array1、array2..
  2. 如果數組中設置有鍵名,且鍵名存在重復,則該鍵值為最后一個鍵名對應的值(覆蓋前面)
  3. 如果數組是指定數字索引,則結果的鍵名會以從0開始的數組重新進行索引
  4. 如果數組中的鍵名存在以上的組合情況,則以顯式指定鍵名的優先
  5. 總結一點是,他要保證合並后的數組索引不能重復,若沒指定鍵名或指定鍵名為數字,則結果按從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有一定的區別。

  1. 若數組沒有指定索引,則他會先把array1的先賦值給結果,假設array1長度為3,array2長度為5,則他會把array2[3]、array2[4]追加到結果后面,array2[0-2]直接忽略
  2. 若為數組指定了索引,不管為數字還是非數字索引,最終結果都會保留指定的索引,若兩個數組存在重復的索引,則以第一個為最終結果(覆蓋后面)
  3. 指定索引和無索引混合的情況下,先看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
)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM