PHP 陣列操作:鍵名比較、差集、交集與翻轉實用技巧
自訂鍵名比較函式
function key_compare_func($key1, $key2) {
if ($key1 == $key2) return 0;
return ($key1 > $key2) ? 1 : -1;
}
鍵名差集 array_diff_ukey()
$array1 = array('blue'=>1, 'red'=>2, 'green'=>3, 'purple'=>4);
$array2 = array('green'=>5, 'blue'=>6, 'yellow'=>7, 'cyan'=>8);
$result = array_diff_ukey($array1, $array2, 'key_compare_func');
/* 結果:red, purple(僅存在於 array1 的鍵) */
值差集 array_diff()
$array1 = array("a"=>"green", "red", "blue", "red");
$array2 = array("b"=>"green", "yellow", "red");
$result = array_diff($array1, $array2);
/* 結果:blue(值不在 array2 中) */
填充陣列 array_fill()
$result = array_fill(5, 6, 'banana');
/* 索引 5 開始填入 6 個 banana
Array([5] => banana, [6] => banana, ..., [10] => banana) */
過濾陣列 array_filter()
function odd($var) { return $var % 2 == 1; }
function even($var) { return $var % 2 == 0; }
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
print_r(array_filter($array1, "odd")); // 保留奇數鍵值
print_r(array_filter($array2, "even")); // 保留偶數鍵值
翻轉陣列 array_flip()
$trans = array("a"=>1, "b"=>2, "c"=>3);
$result = array_flip($trans);
/* Array([1] => a, [2] => b, [3] => c) */
關聯交集 array_intersect_assoc()
$array1 = array("a"=>"green", "b"=>"brown", "c"=>"blue", "red");
$array2 = array("a"=>"green", "yellow", "red");
$result = array_intersect_assoc($array1, $array2);
/* Array([a] => green) 鍵值皆相同 */
函式對照表
| 函式 | 用途 | 比較依據 |
| array_diff_ukey | 鍵名差集 | 自訂回呼比較鍵名 |
| array_diff | 值差集 | 比較值 |
| array_intersect_assoc | 關聯交集 | 鍵名與值皆相同 |
| array_flip | 鍵值互換 | 值必須為有效鍵(字串/整數) |
| array_filter | 回呼過濾 | 回呼回傳 true 保留 |
| array_fill | 建立填充陣列 | 指定起始索引、數量、值 |