針對多維陣列,遞歸移除值為空字串或僅含空白字元的元素,可選擇是否對保留值執行 trim()。
function array_remove_empty(&$arr, $trim = true) {
foreach ($arr as $key => $value) {
if (is_array($value)) {
array_remove_empty($arr[$key], $trim);
} else {
$value = trim($value);
if ($value === '') {
unset($arr[$key]);
} elseif ($trim) {
$arr[$key] = $value;
}
}
}
}
將索引陣列轉為以指定欄位為鍵的關聯陣列,支援僅取單一欄位值或保留整行資料。
function array_to_hashmap(&$arr, $keyField, $valueField = null) {
$ret = [];
if ($valueField) {
foreach ($arr as $row) {
$ret[$row[$keyField]] = $row[$valueField];
}
} else {
foreach ($arr as $row) {
$ret[$row[$keyField]] = $row;
}
}
return $ret;
}
$users = [
['id' => 1, 'name' => 'Alice', 'email' => 'alice@example.com'],
['id' => 2, 'name' => 'Bob', 'email' => 'bob@example.com'],
];
// 以 id 為鍵,保留整行
$map = array_to_hashmap($users, 'id');
// 結果:[1 => [...], 2 => [...]]
// 以 id 為鍵,僅取 name
$nameMap = array_to_hashmap($users, 'id', 'name');
// 結果:[1 => 'Alice', 2 => 'Bob']
$rawData = [
['id' => 1, 'name' => ' Alice ', 'status' => ''],
['id' => 2, 'name' => 'Bob', 'status' => 'active'],
];
array_remove_empty($rawData); // 移除 status 空值,trim name
$cleanMap = array_to_hashmap($rawData, 'id', 'name');
// 結果:[1 => 'Alice', 2 => 'Bob']
&$arr 避免大陣列複製開銷yield 分批處理array_column() (PHP 5.5+) 取得鍵名陣列檢查重複