使用array_splice()在矩阵中一次删除两列

时间:2017-12-04 19:32:58

标签: php

我正在尝试为矩阵中已删除的列和行获取正确的结果,但每当我删除$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]]

1 个答案:

答案 0 :(得分:4)

因为如果您要删除多行或多列,那么删除该列表中的最低列将意味着更高的列数不再正确。

e.g。使用$columnsToDelete = [0, 2];后,如果您已删除列0,则列2已成为列1,但您仍然在尝试删除列{{1} }}

您需要以相反的顺序删除以避免这种情况;所以在删除之前使用2 rsort()$rowsToDelete

$columnsToDelete