定制 sabat24/markdown-table 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

sabat24/markdown-table

最新稳定版本:0.9.5-beta

Composer 安装命令:

composer require sabat24/markdown-table

包简介

Generate GitHub Flavored Markdown tables.

README 文档

README

Generate a markdown (GFM) table in PHP.

Contents

What is this?

This is a simple package that takes table data and generates a GitHub flavored markdown (GFM) table in PHP.

When should I use this?

You can use this package when you want to generate the source code of a GFM table from PHP data structures.

Inspiration

This is a PHP implementation inspired by the JavaScript wooorm/markdown-table package with similar API and functionality.

I also made it compatible with the-kbA-team/markdown-table because I use this package in some projects.

Install

In PHP projects, install with Composer:

composer require sabat24/markdown-table

Use

Typical usage (defaults to align left):

use sabat24\MarkdownTable\Table;

$table = new Table(['Branch', 'Commit']);
echo $table->getString([
    ['main', '0123456789abcdef'],
    ['staging', 'fedcba9876543210'],
]);

Yields:

| Branch  | Commit           |
|---------|------------------|
| main    | 0123456789abcdef |
| staging | fedcba9876543210 |

With align:

use sabat24\MarkdownTable\Table;

$table = new Table(['Beep', 'No.', 'Boop']);
$table->setAlignment(['l', 'c', 'r']);
echo $table->getString([
    ['beep', '1024', 'xyz'],
    ['boop', '3388450', 'tuv'],
    ['foo', '10106', 'qrstuv'],
    ['bar', '45', 'lmno'],
]);

Yields:

| Beep |   No.   |   Boop |
|:-----|:-------:|-------:|
| beep |  1024   |    xyz |
| boop | 3388450 |    tuv |
| foo  |  10106  | qrstuv |
| bar  |   45    |   lmno |

With automatic headers:

use sabat24\MarkdownTable\Table;

$table = new Table(options: ['autoHeaders' => true]);
echo $table->getString([
    ['Col.A', 'Col.B', 'Col.C'],
    ['a', 'z', ''],
    ['b', '', ''],
    ['c', 'y', 'x'],
]);

Yields:

| Col.A | Col.B | Col.C |
|-------|-------|-------|
| a     | z     |       |
| b     |       |       |
| c     | y     | x     |

With custom string length function:

use sabat24\MarkdownTable\Table;

// Using a custom function for handling special characters like emoji properly
function stringWidth($string): int
{
// This is a simplified example - in production, you might want
// a more sophisticated library that handles all Unicode properties
    $pattern = '/[\p{East_Asian_Width=F}\p{East_Asian_Width=W}]/u';
    $wide = preg_match_all($pattern, $string, $matches);

    return mb_strlen($string) + $wide;
}

$table = new Table(['Alpha', 'Bravo']);
$table->setStringLengthFunction('stringWidth');
echo $table->getString([
    ['中文', 'Charlie'],
    ['👩‍❤️‍👩', 'Delta'],
]);

With allowed HTML tags:

use sabat24\MarkdownTable\Table;

$table = new Table(['Feature', 'Description']);
$table->setOptions(['allowedTags' => ['br', 'strong', 'em']]);
echo $table->getString([
    ['Line breaks', 'First line<br/>Second line'],
    ['Formatting', '<strong>Bold text</strong> and <em>italic text</em>'],
]);

Yields:

| Feature     | Description                                         |
|-------------|-----------------------------------------------------|
| Line breaks | First line<br/>Second line                          |
| Formatting  | <strong>Bold text</strong> and <em>italic text</em> |

API

Table Class

__construct(array $columnNames = [], array $options = [], bool $useNamesAsPositions = false)

Creates a new table with:

  • $columnNames: Optional array of column names
  • $options: Optional configuration options
  • $useNamesAsPositions: When true, uses column names as position identifiers instead of array keys (default: false)

addColumn(int|string $pos, Column $column): Table

Adds a column to the table at the specified position.

getColumn(int|string $pos): Column

Retrieves a column at the specified position.

clearColumns(): Table

Removes all columns from the table.

hasColumn(int|string $pos): bool

Checks if a column exists at the specified position.

hasColumns(): bool

Checks if the table has any columns defined.

dropColumn(int|string $pos): Table

Removes a column at the specified position.

setStringLengthFunction(callable $callback): Table

Sets a custom function to determine the visual length of strings, useful for handling CJK characters and emoji.

setAlignment(array|string $align): Table

Sets alignment for columns. Accepts:

  • Single string for all columns: 'l'/'left', 'r'/'right', 'c'/'center'
  • Array of alignments for individual columns

setOptions(array $options): Table

Sets configuration options for the table.

getOptions(): array

Gets current configuration options.

getString(array $rows): string

Generates a Markdown table string from the given rows.

Column Class

__construct(string $title, ?int $alignment = null)

Creates a new column with the specified title and optional alignment.

setAlignmentFromString(?string $alignment): Column

Sets the column alignment using a string:

  • 'l' or 'left' for left alignment
  • 'r' or 'right' for right alignment
  • 'c' or 'center' for center alignment

Options

The following options can be passed to the Table constructor or setOptions() method:

alignDelimiters (bool, default: true)

Whether to align the delimiters. When true, they are aligned; when false, they are staggered.

padding (bool, default: true)

Whether to add a space of padding between delimiters and cells.

delimiterStart (bool, default: true)

Whether to begin each row with the delimiter.

delimiterEnd (bool, default: true)

Whether to end each row with the delimiter.

autoHeaders (bool, default: false)

Whether to use the first row of data as headers.

headerSeparatorPadding (bool, default: false)

Whether to add padding spaces in the header separator row.

allowedTags (array, default: [])

An array of HTML tags that should be preserved in the output. By default, all HTML is escaped, but you can specify tags like ['br', 'strong', 'em'] to allow these tags to remain unescaped in the generated table.

Compatibility

This package requires PHP 8.2 or higher.

统计信息

  • 总下载量: 115
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-03-29