如何用多行替换字符串中的特定位置(X,Y) ?(PHP)



我有一个30x7的字段(见下文),我想替换一个特定的位置。
位置是随机给定的,我想用一个字母替换随机位置(X,Y)。
我已经得到了字段和替换,但这并不是我想要的。

 $field=('################################')."n".str_repeat.('#                              #n', 7)('################################')."n"

'
字段看起来像这样

##############################   
#                            #  
#                            #  
#                            #  
#                            #  
#                            #  
#                            #  
#                            #  
##############################  

和给定位置的空格应替换为字母。
这是32x9的标签,所以只有空白的空格是实际的字段。
我不知道如何从位置中排除周围的标签,以及如何从x和y中计算实际位置。

   $position=($position_x)*($position_y);
   $field=substr_replace($field,'O',$position,1);
   echo("$field");

我就是这么做的。我知道$的位置是错误的,但我不知道如何解决它。
它甚至可能与我创建字段的方式,还是我应该尝试不同的?
提前感谢您的帮助!

您需要确保您的$field是正确的。你的代码有一些语法错误。

关键在于计算坐标。

  • 左边框增加x + 1
  • 为上边框增加y + 1
  • 的颜色是+ 3,因为左边框,右边框和换行
  • 对于最终位置,将行数乘以列数加上x
$placeField = function (string $char, int $x, int $y): string {
    $cols = 30;
    $rows = 7;
    $topBottomFrame = str_repeat('#', $cols + 2) . "n";
    $centerFrame    = '#' . str_repeat(' ', $cols) . "#n";
    $field          = $topBottomFrame . str_repeat($centerFrame, $rows) . $topBottomFrame;
    if ($x < 0 || $x >= $cols || $y < 0 || $y >= $rows) {
        return "Invalid coordinatesn";
    }
    $x++;
    $y++;
    return substr_replace($field, $char, $y * ($cols + 3) + $x, 1);
};
echo $placeField("A", 0, 0);
echo $placeField("B", 29, 6);
echo $placeField("C", 15, 3);

输出
################################
#A                             #
#                              #
#                              #
#                              #
#                              #
#                              #
#                              #
################################
################################
#                              #
#                              #
#                              #
#                              #
#                              #
#                              #
#                             B#
################################
################################
#                              #
#                              #
#                              #
#               C              #
#                              #
#                              #
#                              #
################################

相关内容

  • 没有找到相关文章

最新更新