PHP 7.4 的 array_fill 仅支持一维填充,生成二维数组需嵌套使用 array_fill 或循环,去重则需根据需求选择按行(array_unique + SORT_REGULAR)或展平后处理。

PHP 7.4 中 array_fill 本身只支持一维填充(即生成指定长度、相同值的一维数组),**不能直接生成二维数组**。所以“用 array_fill 填充二维数组”需要手动嵌套或配合其他函数实现;而“去重”则需明确是按行去重(去除重复子数组)还是展平后去重。下面分场景说明实用做法:
✅ 场景1:生成 m×n 的二维数组(如 3 行 4 列,全填 0),再按行去重
先用 array_fill 配合 array_map 或循环构造二维结构,再用 array_unique 去重(注意要加 SORT_REGULAR):
// 生成 3 行、每行 4 个 0 的二维数组
$rows = 3;
$cols = 4;
$value = 0;
// 方法①:用 array_fill + array_map(推荐)
$matrix = array_map(
fn() => array_fill(0, $cols, $value),
array_fill(0, $rows, null)
);
// 方法②:简单 for 循环(更直观)
$matrix = [];
for ($i = 0; $i < $rows; $i++) {
$matrix[] = array_fill(0, $cols, $value);
}
// ✅ 按行去重(保留唯一子数组)
$uniqueMatrix = array_values(array_unique($matrix, SORT_REGULAR));
⚠️ 注意:array_unique 对多维数组默认按字符串比较,必须传 SORT_REGULAR 才能正确比较数组结构。
✅ 场景2:填充后想对所有元素整体去重(展平→去重→可选重构成二维)
如果目标是“把二维数组所有值拿出来去重”,那就先 array_merge(...$matrix) 展平,再 array_unique:
立即学习“PHP免费学习笔记(深入)”;
// 假设已有二维数组 $matrix $flattened = array_merge(...$matrix); // PHP 7.4 支持展开语法 $uniqueValues = array_values(array_unique($flattened)); // 若需重新变回二维(比如每行 3 个) $reconstructed = array_chunk($uniqueValues, 3);
❌ 常见误区提醒
-
array_fill(0, 3, array_fill(0, 4, 0))看似二维,但实际是 3 个同一数组的引用——改一个,全变。PHP 7.4 不自动克隆,务必用array_map或循环确保独立副本。 -
array_unique($matrix)不带标志时可能误判,尤其含数字/字符串混合时,必须加SORT_REGULAR。 - 去重后键名会乱(如 0,2,5),用
array_values()重置索引更安全。
不复杂但容易忽略细节,按需选择构造方式 + 显式去重策略即可。



















