You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的行和列的索引记录下来,避免重复处理同一行/列。
  2. 修改阶段:再次遍历数组,只要当前元素所在的行或列在标记列表中,就将其设为1。这种方式逻辑清晰,且比边遍历边修改的效率更高。

内容的提问来源于stack exchange,提问作者anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:55:22