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

PHP 實現九九乘法表:從基礎邏輯到面試優化的多種寫法

     編輯:PHP 相關知識

九九乘法表是經典的編程入門練習,考察雙層循環控制、字符串拼接、輸出格式化能力。本文展示從最基礎的實現到面試加分的優化版本,涵蓋 HTML 表格、CLI 對齊、函數式風格等多種輸出格式。

基礎版:雙層 for 循環

<?php
for ($i = 1; $i <= 9; $i++) {
    for ($j = 1; $j <= $i; $j++) {
        echo "{$j}×{$i}=" . ($j * $i) . ' ';
    }
    echo PHP_EOL; // 換行
}

輸出:

1×1=1 
1×2=2 2×2=4 
1×3=3 2×3=6 3×3=9 
...
1×9=9 2×9=18 ... 9×9=81

面試加分點:邏輯解析

  • 外層循環 控制行數(1-9 行),變量 $i 代表被乘數
  • 內層循環 控制每行輸出個數(1 到 $i),變量 $j 代表乘數
  • 條件 $j <= $i 實現下三角矩陣輸出,避免重複(如 2×3 與 3×2)

進階版:HTML 表格輸出(Web 顯示)

<?php
function multiplicationTableHtml(): string
{
    $html = '';
    
    for ($i = 1; $i <= 9; $i++) {
        $html .= '';
        for ($j = 1; $j <= 9; $j++) {
            if ($j <= $i) {
                $html .= "";
            } else {
                $html .= '';
            }
        }
        $html .= '';
    }
    
    $html .= '
{$j}×{$i}=" . ($j * $i) . "—
'; return $html; } echo multiplicationTableHtml();

CLI 完美對齊版(面試現場演示加分)

<?php
function multiplicationTableCli(): void
{
    // 計算最大寬度:9×9=81 → 6 字符,預留 2 字符間距
    $cellWidth = 8;
    
    for ($i = 1; $i <= 9; $i++) {
        $line = '';
        for ($j = 1; $j <= $i; $j++) {
            $expr = "{$j}×{$i}=" . ($j * $i);
            $line .= str_pad($expr, $cellWidth, ' ', STR_PAD_RIGHT);
        }
        echo $line . PHP_EOL;
    }
}

/* 輸出效果:
1×1=1    1×2=2    2×2=4    1×3=3    2×3=6    3×3=9    ...
每列完美對齊,適合終端演示
*/

函數式風格(PHP 7.4+ 箭頭函數)

<?php
$table = array_map(fn($i) => 
    implode(' ', array_map(fn($j) => "{$j}×{$i}=" . ($j * $i), range(1, $i))),
    range(1, 9)
);

echo implode(PHP_EOL, $table);

生成器版(內存友好,大數據擴展)

<?php
function multiplicationGenerator(): Generator
{
    for ($i = 1; $i <= 9; $i++) {
        for ($j = 1; $j <= $i; $j++) {
            yield "{$j}×{$i}=" . ($j * $i);
        }
    }
}

foreach (multiplicationGenerator() as $expr) {
    echo $expr . ' ';
    // 可在此處理每行換行邏輯...
}

面試常見追問與回答

| 問題 | 核心考點 | 參考回答 | |------|----------|----------| | 如何輸出上三角/全矩陣? | 循環邊界控制 | 內層 $j <= 9 或 $j <= $i 修改條件 | | 時間複雜度? | 算法分析 | O(n²),n=9 為常數,實際 O(1) | | 如何處理大數乘法(如 99×99)? | 擴展性 | 字符串乘法或 BCMath 擴展 bcmul() | | 能否不用乘法運算符實現? | 邏輯思維 | 累加法:$result = 0; for($k=0;$k<$j;$k++) $result += $i; | | 如何單元測試? | 工程化 | 斷言輸出字符串包含預期表達式,或測試生成器產出序列 |

擴展:可配置大小的乘法表生成器

<?php
class MultiplicationTable
{
    public function __construct(
        private int $maxFactor = 9,
        private string $format = '{a}×{b}={c}',
        private string $separator = ' '
    ) {}

    public function generate(): array
    {
        $lines = [];
        for ($i = 1; $i <= $this->maxFactor; $i++) {
            $line = [];
            for ($j = 1; $j <= $i; $j++) {
                $line[] = strtr($this->format, [
                    '{a}' => (string)$j,
                    '{b}' => (string)$i,
                    '{c}' => (string)($j * $i),
                ]);
            }
            $lines[] = implode($this->separator, $line);
        }
        return $lines;
    }

    public function renderHtml(): string
    {
        $html = '';
        foreach ($this->generate() as $line) {
            $html .= '';
        }
        $html .= '
' . implode('', explode($this->separator, $line)) . '
'; return $html; } } // 使用 $table = new MultiplicationTable(12, '{a}×{b}={c}', ' | '); echo implode(PHP_EOL, $table->generate());

總結

九九乘法表看似簡單,實則包含雙層循環控制、邊界條件判斷、格式化輸出、擴展性設計等核心編程素養。面試時:

  1. 先寫出最基礎正確版本
  2. 主動說明外層控制行、內層控制列、$j <= $i 避免重複
  3. 補充 HTML/CLI 多格式輸出、函數式寫法、可配置類設計
  4. 預判追問:複雜度、大數擴展、測試策略

這不僅是寫對乘法表,更是展示「從基礎到工程化」的思維深度。

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