PHP 8.0 中 array_pad 不支持二维数组,需先手动用 array_map + array_pad 统一子数组长度,再用 array_unique(SORT_REGULAR) 按值去重或手动按字段去重。

PHP 8.0 中,array_pad 本身只作用于一维数组,**不能直接补齐二维数组**;要去重,也需明确“去重”的维度(是去除重复的子数组?还是按某个键去重?)。所以需要分两步:先统一子数组长度(手动 pad),再按需去重。
1. 手动补齐二维数组的子数组长度
遍历每个子数组,用 array_pad 补齐到目标长度(如最大长度或指定长度):
$arr = [
[1, 2],
[3, 4, 5],
[6]
];
// 先找出最长子数组长度
$maxLen = max(array_map('count', $arr));
// 补齐每个子数组到 $maxLen,用 0 填充(可自定义填充值)
$padded = array_map(function($sub) use ($maxLen) {
return array_pad($sub, $maxLen, 0);
}, $arr);
// 结果:
// [[1,2,0], [3,4,5], [6,0,0]]
2. 去重:按完整子数组去重(保留唯一行)
使用 array_unique + SORT_REGULAR(PHP 8.0 默认支持)可对二维数组做“值比较”去重:
$unique = array_unique($padded, SORT_REGULAR); // 注意:array_unique 会重置键名,如需保持顺序可用 array_values() $unique = array_values($unique);
3. 去重:按某个字段(如 'id')去重(关联二维数组场景)
若二维数组是关联形式(如数据库结果),想按某键去重,需手动处理:
立即学习“PHP免费学习笔记(深入)”;
$arr = [
['id'=>1, 'name'=>'a'],
['id'=>2, 'name'=>'b'],
['id'=>1, 'name'=>'c'], // 重复 id
];
$seen = [];
$uniqueById = [];
foreach ($arr as $item) {
if (!isset($seen[$item['id']])) {
$seen[$item['id']] = true;
$uniqueById[] = $item;
}
}
4. 封装成可复用函数(推荐)
把补齐 + 去重逻辑封装起来,提高复用性:
function padAndUnique2D(array $arr, int $targetLen = 0, $padValue = null, bool $byValue = true): array
{
if (empty($arr)) return [];
$len = $targetLen ?: max(array_map('count', $arr));
$padded = array_map(fn($sub) => array_pad($sub, $len, $padValue), $arr);
return $byValue
? array_values(array_unique($padded, SORT_REGULAR))
: $padded; // 如需后续按字段去重,此处可扩展参数
}
// 使用示例
$result = padAndUnique2D([[1],[2,3],[4,5,6]], 3, 0);
// → [[1,0,0], [2,3,0], [4,5,6]]



















