0

I am a newbie in php+Zend programming, so need your valuable advice. 1. I have a table in mysql (phpmyadmin), the attributes in the table are ~ user_id, expense_id, date month, year, expense. 2. I have .phtml file (index.phtml) in the View folder (Zend 2.2). It is accessed by indexAction() in the Controller page. Code:

return viewmodel ( return array=>( 'years'=>$this->getExpenseTable()->fetchAll($user_id); )),

[sorry if it's not in the proper format]. This function is meant to return all the values from the db, when I put it into a table with foreach. The code in index.phtml is below:

escapeHtml($expense->expense);?> .....and so on......

今私の問題は次のとおりです。a) 同じ index.phtml ファイル内の別の foreach ループを使用して、別のテーブルで変数 'years' を使用できません。「これは前方のみの結果セットです」と表示されます。unset() と rewind() を実装しようとしましたが、どちらも機能しませんでした。b)テーブルから「年」属性の一意の値を取得し(テーブルヘッダーとして考えるかもしれません)、各年の下に費用の合計を入れたいと思います。

4

1 に答える 1

0

おそらく複数の質問にラップする必要がある複数の質問がありますが、とにかく、次のようになります。

1 つの結果セットに対して複数回反復します

一部のドライバーでは、バッファリングが可能です。の値$yearsは Zend ResultSet オブジェクトです。$years->buffer()ループする前に呼び出して、内部バッファーを有効にして、2 回反復できるようにすることができます。

// $set is ResultSet
$set->buffer();

foreach ($set as $result) {} // first time
foreach ($set as $result) {} // second time

年を抽出します。

そのために単純なビュー ロジックを使用できます。

// example resultset
$result = array(
  array('year' => '2012', 'value' => 'foo'),
  array('year' => '2012', 'value' => 'bar'),
  array('year' => '2013', 'value' => 'baz'),
);

// store year for check
$year = null;
foreach ($result as $item) {
    if ($item['year']) !== $year) {
        $year = $item['year'];
        echo $year;
    }

    echo $item['value'];
}
于 2013-07-13T13:39:38.160 に答える