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

PHP 繪製實心與空心菱形:演算法解析與 str_pad 高效實現

     編輯:PHP 相關知識

PHP 繪製實心與空心菱形:演算法解析與 str_pad 高效實現

以程式碼輸出幾何圖形是經典練習,能訓練迴圈控制、字串操作、數學思維。本文解析菱形列印邏輯,並展示使用 str_pad() 避免巢狀迴圈的高效寫法。

幾何規律分析

邊長 N,總行數 rows = 2N - 1。第 i 行 (0-index):

區段行範圍前導空格數字符數/內容
上半部0 ≤ i < NN - i - 1實心:2i + 1;空心:首尾字符,中間 2i - 1 空格
下半部N ≤ i < 2N-1i - N + 1實心:2(2N-1-i) - 1;空心:首尾字符,中間 2(2N-1-i) - 3 空格

實心菱形實現

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(字串, 總長度, 填充字符, 填充類型)
        // STR_PAD_LEFT: 左填充(前導空格) | STR_PAD_BOTH: 兩側填充
        $line = str_pad('', $spaces, ' ', STR_PAD_LEFT)
              . str_pad('', $chars, $char, STR_PAD_LEFT)
              . "\n";
        $output .= $line;
    }
    return $output;
}

echo '
' . solidDiamond(5) . '
'; /* * *** ***** ******* ********* ******* ***** *** * */

空心菱形實現

function hollowDiamond(int $n = 5, string $char = '*'): string {
    $rows = $n * 2 - 1;
    $output = '';
    for ($i = 0; $i < $rows; $i++) {
        if ($i < $n) { // 上半部
            $spaces = $n - $i - 1;
            $total  = $i * 2 + 1;
        } else {       // 下半部
            $spaces = $i - $n + 1;
            $total  = ($rows - $i) * 2 - 1;
        }
        if ($total == 1) { // 頂點/底點
            $line = str_pad('', $spaces, ' ', STR_PAD_LEFT) . $char;
        } else {
            // 先建立中空字串:兩側各1字符,中間空格
            $inner = str_pad('', $total - 2, ' ', STR_PAD_BOTH);
            // 再在兩側填充字符
            $diamondLine = str_pad($inner, $total, $char, STR_PAD_BOTH);
            $line = str_pad('', $spaces, ' ', STR_PAD_LEFT) . $diamondLine;
        }
        $output .= $line . "\n";
    }
    return $output;
}

echo '
' . hollowDiamond(5) . '
'; /* * * * * * * * * * * * * * * * * */

str_pad 關鍵參數詳解

str_pad(string $input, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT): string
  • STR_PAD_RIGHT (預設):右側填充。
  • STR_PAD_LEFT:左側填充(適合前導空格)。
  • STR_PAD_BOTH:兩側填充,左側優先(適合置中、空心圖形)。

效能與擴充

  • 時間複雜度 O(N),空間複雜度 O(N²) (輸出字串大小)。
  • 避免 for/while 逐字元拼接,str_pad 為 C 實現,速度更快。
  • 可擴充支援自定字符、顏色 ANSI 編碼、HTML <pre> 輸出。

常見錯誤避坑

  1. 行數計算錯誤:總行數為 2N-1,非 2N。
  2. 空心中間空格數:total - 2 (扣除首尾兩字符),下半部同理。
  3. str_pad 長度參數:傳入目標總長度,非填充字元數。
  4. 輸出編碼:終端機用 \n,網頁用 <br> 或包裹 <pre> 保留空格。

掌握幾何規律並善用字串函式,能用最少程式碼實現複雜圖形輸出。此類邏輯常見於 CLI 進度條、表格美化、終端機遊戲渲染等場景。

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