Senna_Records_SubRecords クラス

class Senna_Records_SubRecords implements Traversable, ArrayAccess, Countable

Senna_Records_SubRecordsクラスは、サブレコード情報を表現するクラスです。

サブレコード情報は0個以上のサブレコード(Senna_Records_Row)の集合です。

このクラスはPHPコード側からインスタンス化できません。エクステンション内部で生成します。


クラス概要

<?php
$i = Senna_Index::open('/path/to/index');
$r->add('楽しい 全文検索');

foreach ($r as $row) {
  // サブレコード情報オブジェクトを取得
  $subRecords = $row->getSubRecords();

  // 保持しているサブレコード数を取得
  echo $subRecords->count(), "\n";

  // サブレコード情報から1件のサブレコードを取得
  // ($subRowはSenna_Records_Rowオブジェクト)
  $subRow = $subRecords->get(0);
  echo $subRow->getSection(), "\n";

  // サブレコード情報から10件のサブレコードを切り出す
  // ($list1, $list2は、Senna_Records_Rowオブジェクトの配列)
  $list1 = $subRecords->slice(0, 10);
  $list2 = $subRecords->slice(10, 10);
  
  // 全てのサブレコードの情報を表示
  // ($subRowはSenna_Records_Rowオブジェクト)
  foreach ($subRecords as $subRow) {
    printf(
      "ID = %s, len = %d, score = %d, section = %d, pos = %d, subrecs = %d\n",
      $subRow->getKey(),     // 文書IDを取得
      $subRow->getKeySize(), // 文書ID長を取得
      $subRow->getScore(),   // スコアを取得
      $subRow->getSection(), // 段落番号を取得
      $subRow->getPosition(),// 出現位置を取得
      $subRow->getSubRecordCount() // サブレコードはサブレコードを持たないので常に0個
    );
  }
}

クラス定数

このクラスは定数を定義していません。

コンストラクタ

PHPコード側でインスタンスを生成することはできません。インスタンスは、Senna_Records_Rowからサブレコード情報を取得する際にエクステンション内部で生成します。

メソッド

count

public int count()

このサブレコード情報オブジェクトが保持しているサブレコード数を返します。

Senna_Recordsクラスの引数max_n_subrecsで指定した数を超えることはありません。

SPLが有効な場合、Senna_Records_SubRecordsクラスはCountableインターフェイスを実装しますので、count()関数でも件数を取得できます。count($subRecords);$subRecords->count();のエイリアスになります。

  • 戻り値
    • サブレコード数

slice

public array slice(int $offset, int $count)

このサブレコード情報の一部を配列として切り出します。

オブジェクトが保持している先頭のサブレコードを0番目として、offset番目から最大count個を切り出します。配列の各要素はSenna_Records_Rowオブジェクトです。

現在のところ「サブサブレコード」の概念はありませんので、切り出したSenna_Records_Rowオブジェクトに対してgetSubRecordCount()を呼ぶと必ず0を返します。

offsetの値が保持しているサブレコード数以上の場合、空の配列を返します。

  • パラメータ
    • offset - オフセット
    • count - 切り出す要素数
  • 戻り値
    • 切り出したサブレコードの配列
  • 例外
    • UnexpectedValueException - offsetが負の値、またはcount1未満の場合
    • SennaException - サブレコード情報の取得に失敗した場合

get

public Senna_Records_Row get(int $offset)

このサブレコード情報の指定された位置のサブレコードを返します。

オブジェクトが保持している先頭のサブレコードを0番目として、offset番目のサブレコードを取り出します。

現在のところ「サブサブレコード」の概念はありませんので、切り出したSenna_Records_Rowオブジェクトに対してgetSubRecordCount()を呼ぶと必ず0を返します。

ハッシュ形式でのアクセスにも対応しています。$subRecords[0];$subRecords->get(0);のエイリアスになります。

  • パラメータ
    • offset - オフセット
  • 戻り値
    • 指定されたオフセットにあるサブレコード
  • 例外
    • OutOfBoundsException - offsetが範囲外の場合。(offset < 0)または(count() <= offset)
    • SennaException - サブレコード情報の取得に失敗した場合

最終更新:2008/03/31 09:05