首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 繪製實心與空心菱形:邊長 N 的演算法完整實現與 str_pad 技巧

     編輯:PHP 相關知識

使用 PHP 循環繪製幾何圖形是經典練習題,亦是理解座標計算、字串填充、循環控制的良好切入點。本文提供實心與空心菱形的完整演算法分析、優化代碼與 str_pad 進階用法。

幾何數學模型

菱形邊長 N,總行數 rows = 2N - 1。以行索引 i (0-based) 計算:

上半部 (i < N)

  • 前置空格數:N - i - 1
  • 字符數:2i + 1

下半部 (i ≥ N)

  • 前置空格數:i - N + 1
  • 字符數:2(rows - i) - 1

實心菱形:str_pad 一行搞定

/**
 * 繪製實心菱形
 * @param int $n 邊長 (default 5)
 * @param string $char 顯示字符 (default *)
 * @return string
 */
function solidDiamond(int $n = 5, string $char = '*'): string
{
    $rows = $n * 2 - 1;
    $output = '';
    for ($i = 0; $i < $rows; $i++) {
        if ($i < $n) { // 上半部
            $spaces = $n - $i - 1;
            $chars  = $i * 2 + 1;
        } else { // 下半部
            $spaces = $i - $n + 1;
            $chars  = ($rows - $i) * 2 - 1;
        }
        // str_pad($input, $length, $pad_string, $pad_type)
        $output .= str_pad('', $spaces, ' ')
                 . str_pad('', $chars, $char)
                 . "\n";
    }
    return $output;
}

// 輸出
echo '<pre>';
echo solidDiamond(5);
echo '</pre>';

輸出結果 (N=5)

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

空心菱形:雙層 str_pad 構造邊框

核心思路:每行實際字符數 total,其中首尾為字符,中間 total - 2 為空格。使用 STR_PAD_BOTH 將字符置於兩側。

/**
 * 繪製空心菱形
 * @param int $n 邊長
 * @param string $char 顯示字符
 * @return string
 */
function hollowDiamond(int $n = 5, string $char = '*'): string
{
    $rows = $n * 2 - 1;
    $output = '';
    for ($i = 0; $i < $rows; $i++) {
        if ($i < $n) { // 上半部
            $total = $i * 2 + 1;
            $spaces = $n - $i - 1;
        } else { // 下半部
            $total = ($rows - $i) * 2 - 1;
            $spaces = $i - $n + 1;
        }
        if ($total == 1) {
            // 頂點/底點僅一字符
            $line = str_pad('', $spaces, ' ') . $char;
        } else {
            // 中空行:首尾字符,中間空格
            $inner = str_pad('', $total - 2, ' ', STR_PAD_BOTH);
            $line = str_pad('', $spaces, ' ')
                  . str_pad($inner, $total, $char, STR_PAD_BOTH);
        }
        $output .= $line . "\n";
    }
    return $output;
}

echo '<pre>';
echo hollowDiamond(5);
echo '</pre>';

輸出結果 (N=5)

    *
   * *
  *   *
 *     *
*       *
 *     *
  *   *
   * *
    *

str_pad 進階用法解析

參數說明範例
$input輸入字符串'' (空字符串)
$length目標長度5
$pad_string填充字符(可多字符)'*', 'ab'
$pad_type填充方向STR_PAD_RIGHT(預設), STR_PAD_LEFT, STR_PAD_BOTH

STR_PAD_BOTH 關鍵行為

$inner = str_pad('', 3, ' ', STR_PAD_BOTH); // "   " (3空格)
$line  = str_pad($inner, 5, '*', STR_PAD_BOTH); // "*   *"
# 邏輯:將 $inner 置中,兩側用 * 填充至長度 5

效能與擴展建議

  • 大 N 值:使用 sprintf 或預分配陣列 array_fill 再 implode,避免字符串連接開銷
  • 多字符填充:str_pad('', 10, '★ ') 可產生重複圖案
  • 彩色終端:結合 ANSI 轉義碼 \033[31m 實現彩色菱形
  • HTML 輸出:將 \n 替換為 <br>,空格用 &nbsp;,包裹 <pre>

通用幾何繪製抽象

interface ShapeDrawer {
    public function draw(int $size, string $char): string;
}

class DiamondDrawer implements ShapeDrawer {
    public function draw(int $n, string $char = '*'): string { ... }
    public function drawHollow(int $n, string $char = '*'): string { ... }
}

// 使用
$drawer = new DiamondDrawer();
echo $drawer->draw(7, '#');

掌握 str_pad 與循環座標計算,不僅能繪製菱形,更能舉一反三實現三角形、六邊形、數字金字塔等任意字符圖形,是 PHP 字符串操作與邏輯思維的優秀練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved