学无先后,达者为师

网站首页 PHP其他 正文

php二维数组插入矩形方块模拟货架

作者:渡目成书 更新时间: 2022-01-28 PHP其他
  • 今天在论坛看到一个求助问题,利用二维数组模拟货架,往货架上面放矩形,觉得这个需求有点意思,就自己琢磨了下

在这里插入图片描述

  • 我的思路是将二维数据想象成网格,将要放入矩形放进去,遍历网格的每个小格子,作为矩形的左上格,推算出这个矩形所占的所有网格坐标,再来辨别所在小格子是否都是空的



$arrs =
    [
        0 => [1, 0, 1, 1, 0, 0, 1, 1],
        1 => [1, 1, 1, 1, 0, 1, 1, 1],
        2 => [0, 0, 0, 0, 0, 1, 1, 1],
        3 => [1, 1, 1, 1, 1, 1, 1, 1],
        4 => [1, 1, 1, 0, 1, 1, 0, 0],
        5 => [0, 1, 1, 0, 0, 0, 0, 0],
        6 => [0, 0, 0, 0, 0, 0, 0, 0],
        7 => [0, 0, 0, 0, 0, 0, 0, 0],
        8 => [0, 0, 0, 0, 0, 0, 0, 0],
        9 => [0, 0, 0, 0, 0, 0, 0, 0]
    ];


//2X2 坐标
$a =[1,1];
$w = count($arrs[0]) - $a[0];//横坐标不大于
$h = count($arrs) - $a[1];//纵坐标不大于

foreach ($arrs as $key => $arr) {
    if ($key >= $h) {
        break;
    }
    foreach ($arr as $k => $i) {
        if ($k >= $w) {
            break;
        }
        if ($i==1){
            continue;
        }
        //遍历每一个空的格子
            $sum =[];
        for ($s=0;$s<=$a[1];$s++){//以这个空格子为左上取出矩形所在位子的所有坐标数据
            for ($d=0;$d<=$a[0];$d++){
                $sum =array_merge($sum,[$arrs[$s+$key][$d+$k]]);
            }
        }
            $site=[];
        if (count($sum)>0){
            if (array_sum($sum)<1){//矩形覆盖的所有坐标都为空
                $site=[$key,$k];
                break;
            }
        }

    }

    if (count($site)>0){
        var_dump($site);//获得坐标
        break;
    }
}


原文链接:https://blog.csdn.net/weixin_43674113/article/details/109244232

栏目分类
最近更新