dump()支援 HTML/CLI 環境自動切換,可選擇回傳字串而非直接輸出。
function dump($vars, $label = '', $return = false) {
if (ini_get('html_errors')) {
$out = "<pre>\n";
if ($label) $out .= "<strong>$label :</strong>\n";
$out .= htmlspecialchars(print_r($vars, true));
$out .= "\n</pre>\n";
} else {
$out = $label . " :\n" . print_r($vars, true);
}
if ($return) return $out;
echo $out;
return null;
}
// 用法
dump($_POST, 'POST Data');
$log = dump($bigArray, 'Debug', true); // 寫入日誌檔
file_put_contents('debug.log', $log, FILE_APPEND);
array_remove_empty()預設同時 trim() 非空字串,可關閉。
function array_remove_empty(array &$arr, $trim = true) {
foreach ($arr as $key => &$val) {
if (is_array($val)) {
array_remove_empty($val, $trim);
if (empty($val)) unset($arr[$key]); // 遞迴後若成空陣列也移除
} else {
$val = trim($val);
if ($val === '') {
unset($arr[$key]);
} elseif ($trim) {
$arr[$key] = $val;
}
}
}
}
// 用法
$data = ['a' => ' ', 'b' => 'val', 'c' => ['x' => '', 'y' => ' ok ']];
array_remove_empty($data);
// 結果:['b' => 'val', 'c' => ['y' => 'ok']]
array_chunk() (內建)$items = range(1, 21); // 1~20
$pages = array_chunk($items, 5); // 每 5 個一組
/* 結果:
[
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20]
]
*/
// 分頁顯示
$page = isset($_GET['p']) ? max(1, (int)$_GET['p']) : 1;
$perPage = 5;
$paged = $pages[$page - 1] ?? [];
array_chunk_assoc()function array_chunk_assoc(array $arr, $size, $preserveKeys = true) {
$chunks = [];
$i = 0;
foreach ($arr as $k => $v) {
$chunks[floor($i / $size)][$k] = $v;
$i++;
}
return $chunks;
}
| 需求 | 函式/寫法 |
|---|---|
| 過濾空值/false/0 | array_filter($arr) / array_filter($arr, 'strlen') |
| 重新索引 (0..n) | array_values($arr) |
| 鍵名轉小寫 | array_change_key_case($arr, CASE_LOWER) |
| 陣列差集 (鍵/值) | array_diff_key / array_diff_assoc |
| 合併同鍵覆蓋 | array_merge (數值鍵重排) / $a + $b (保留左側鍵) |
| 隨機取樣 | array_rand($arr, $n) 回傳鍵 / array_intersect_key($arr, array_flip(array_rand($arr, $n))) 取值 |