我想制作一个箭头,其基本宽度是输入大小的一半

I want to make an arrow that the base width is half of the size of the input

我有这个有效的代码,但缺少一些细节

$input=7;
$k=($input+1)/2;
        for($i=1;$i<=$input;$i++){
            for($j=1;$j<=$input;$j++){
                if($j==($input+1)/2 || $j==$k || $j==$input-$k+1){
                    echo "*";
                }
                else{
                    echo "-";
                }
            }
            echo "<br>";
            $k++;
        }

输出如下所示

---*---
--***--
-*-*-*-
*--*--*
---*---
---*---
---*---

但它应该是这样的

___*___
__***__
_*****_
*******
__***__
__***__
__***__

请发送一些帮助

在你的 if 语句中你有三个条件。所以只能连续三颗星。

我认为你的结构应该更复杂。您可以改用 str_repeat。像这样:

$input=7;

for($i=1;$i<=$input;$i+=2) {
    echo str_repeat('-', ($input - $i) / 2 ) .
      str_repeat('*', $i) .
      str_repeat('-', ($input - $i) / 2 ) .
      '<br>';
}

$shaft = floor($input / 2);

for($i=1;$i<$input/2;$i++) {
     echo str_repeat('-', ($input - $shaft) / 2 ) .
       str_repeat('*', $shaft) .
       str_repeat('-', ($input - $shaft) / 2 ) .
       '<br>';
}

第一个循环绘制每行增长 2 的三角形。

第二个循环绘制轴。

因此,如果您只需要使用循环和 if else 来执行此操作,则必须详细说明您的 if 语句。这是我的解决方案:

$input = 7;

for($i=1;$i<=2*$input;$i+=2) {
    for($k=1;$k<=$input;$k++) {
        if(($i <= $input && $k > floor(($input - $i)/2) && $k <= ceil(($input + $i)/2)) ||
            ($i > $input && $k > ceil($input/4) && $k <= floor(3/4*$input))) {
                echo "*";
        } else {
                echo "-";
        }
    }
    echo "<br>";
}

注意:在第一个循环中我使用 $i+=2,因此每次迭代 $i 都会增加 2。为了获得正确的行数,循环会一直持续到 2*$input.

if 语句有两部分。在第一部分绘制三角形(每行添加两颗星,因为 $i 增加 2)。第二部分,当$i变得大于$input时,画轴,每边宽度的一半,宽度的1/4。

我得到答案了,谢谢大家。

    $x=($input/2); $y=$x+1; $w=($input/2);
    if($w%2==0) {
    $w++;
    }
    for($i=1; $i<=$input; $i++) {
    for($j=1; $j<=$input; $j++) {
    if($j>=$x && $j<=$y) {
      echo "*";
    }
    else {
      echo "_";
    }
}
if($i>(($input-1)/2)) {
  $x=(($input-$w)/2)+1;
  $y=($x+$w)-1;
}
else {
  $x--;
  $y++;
}
echo "<br>";
    }