- ┌──────────┬────────────────────┐
- │Zend │Framework │
- └──────────┴────────────────────┘
Programmer's Reference Guide
| Zend_Text_Figlet |
Zend_Text_Table
Zend_Text_Table は、さまざまなデコレータを使用して テキストベースの表をその場で作成するためのコンポーネントです。 これは、たとえばテキスト形式のメールで構造化されたデータを送信したい場合などに便利です。 その場合は等幅フォントを使う必要があります。 また、CLI アプリケーションで表形式の情報を表示する場合にも便利です。 Zend_Text_Table は、複数行にわたるカラムやカラムの連結、 テキストの配置の指定に対応しています。
注意: エンコーディング
Zend_Text_Table のデフォルトでは、文字列が UTF-8 でエンコードされていることを前提としています。 もしそれ以外を使用している場合は、文字エンコーディングを コンストラクタあるいは Zend_Text_Table_Column のsetContentメソッドのパラメータで指定します。 もうひとつの方法として、もしそのエンコーディングをプロセス全体で使う場合には Zend_Text_Table::setInputCharset($charset) で標準の入力文字セットを定義することができます。 表を出力する際に別の文字セットを使用したい場合は、 Zend_Text_Table::setOutputCharset($charset) で設定します。
Zend_Text_Table オブジェクトは行の集まりで構成されており、 行は列の集まりで構成されています。行と列を表すのが、それぞれ Zend_Text_Table_Row および Zend_Text_Table_Column です。 表を作成する際に、表のオプションを配列で指定することができます。 指定できるオプションは次のとおりです。
-
columnWidths(必須): 配列で、すべてのカラムとその幅 (文字数) を指定します。 -
decorator: テーブルの罫線に使用するデコレータ。 デフォルトはunicodeですが、asciiあるいは独自のデコレータオブジェクトのインスタンスを指定することもできます。 -
padding: カラムの左右の余白文字数。 デフォルトはゼロです。 -
AutoSeparate: 各行を横線でどのように区切るかの方法。 デフォルトは、すべての行間を区切ります。これは、次の Zend_Text_Table の定数のビットマスクで指定します。-
Zend_Text_Table::AUTO_SEPARATE_NONE
-
Zend_Text_Table::AUTO_SEPARATE_HEADER
-
Zend_Text_Table::AUTO_SEPARATE_FOOTER
-
Zend_Text_Table::AUTO_SEPARATE_ALL
-
表に行を追加するには、
Zend_Text_Table_Row のインスタンスを作成して、それを
appendRow メソッドで追加します。行自体には何もオプションはありません。
配列を直接 appendRow メソッドに渡すこともできます。
この場合は、複数の列オブジェクトからなる行オブジェクトに自動的に変換されます。
行に列を追加する方法も同じです。
Zend_Text_Table_Column のインスタンスを作成し、
列のオプションをコンストラクタで指定するか、あるいは後から
set* メソッドで設定します。
最初のパラメータは列の中身で、これは複数行にすることもできます。
複数行にする場合は \n で行を区切ります。
2 番目のパラメータは配置を指定します。デフォルトは左詰めで、
Zend_Text_Table_Column のクラス定数のいずれかを指定することができます。
-
ALIGN_LEFT -
ALIGN_CENTER -
ALIGN_RIGHT
appendColumn
のパラメータに列オブジェクトを指定してコールします。
あるいは、文字列を直接 appendColumn メソッドに渡すこともできます。
最後に、表をレンダリングするには render
メソッドを使用します。あるいは、
echo $table; や $tableString = (string) $table
などとしてマジックメソッド __toString を使用することもできます。
例1 Zend_Text_Table の使用例
この例では、Zend_Text_Table でシンプルな表を作成するための方法を示します。
- // シンプルな例
- // あるいは冗長な例
- $row = new Zend_Text_Table_Row();
- $row->appendColumn(new Zend_Text_Table_Column('Zend'));
- $row->appendColumn(new Zend_Text_Table_Column('Framework'));
- $table->appendRow($row);
- echo $table;
この結果は次のようになります。
| Zend_Text_Figlet |
