PHP中如何根据二维数组内的1修改其横向与纵向元素值
PHP二维数组行/列批量置1实现
需求说明
给定N*M的二维数组,检测数组中值为1的元素,将该元素所在的整行和整列全部修改为1。
原始数组示例:
$arys = [ [0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0], ];
修改后目标数组:
$arys = [ [0, 1, 1, 0], [1, 1, 1, 1], [1, 1, 1, 1], [0, 1, 1, 0], ];
实现代码
<?php // 原始二维数组 $arys = [ [0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0], ]; // 存储需要置1的行索引和列索引 $targetRows = []; $targetCols = []; // 第一轮遍历:标记所有包含1的行和列 foreach ($arys as $rowIdx => $rowData) { foreach ($rowData as $colIdx => $val) { if ($val === 1) { $targetRows[$rowIdx] = true; $targetCols[$colIdx] = true; } } } // 第二轮遍历:根据标记批量修改数组 foreach ($arys as $rowIdx => &$rowData) { foreach ($rowData as $colIdx => &$val) { if (isset($targetRows[$rowIdx]) || isset($targetCols[$colIdx])) { $val = 1; } } } // 输出修改后的数组 print_r($arys); ?>
代码说明
- 标记阶段:先遍历一次数组,把所有包含
1的行和列的索引记录下来,避免重复处理同一行/列。 - 修改阶段:再次遍历数组,只要当前元素所在的行或列在标记列表中,就将其设为
1。这种方式逻辑清晰,且比边遍历边修改的效率更高。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

