我正在尝试为矩阵中已删除的列和行获取正确的结果,但每当我删除$columnsToRemove
数组中指定的第一列时,数组都会移位,我最终会删除错误的列。在下面的示例中,如何一次删除每个子矩阵中的第0列和第2列?
$matrix = [
[1,0,0,2],
[0,5,0,1],
[0,0,3,5]
];
$rowsToDelete = [1];
$columnsToDelete = [0, 2];
function constructSubmatrix($matrix, $rowsToDelete, $columnsToDelete) {
foreach($rowsToDelete as $row){
array_splice($matrix, $row, 1);
}
foreach($columnsToDelete as $column){
for($i = 0; $i < count($matrix); $i++){
array_splice($matrix[$i], $column, 1);
}
}
return $matrix;
}
返回值应为:[[0,2],[0,5]]
但我一直得到:[[0,0],[0,3]]
答案 0 :(得分:4)
因为如果您要删除多行或多列,那么删除该列表中的最低列将意味着更高的列数不再正确。
e.g。使用$columnsToDelete = [0, 2];
后,如果您已删除列0
,则列2
已成为列1
,但您仍然在尝试删除列{{1} }}
您需要以相反的顺序删除以避免这种情况;所以在删除之前使用2
rsort()
和$rowsToDelete
。
$columnsToDelete