0

私はこの問題に対してさまざまな解決策を試してきましたが、成功しませんでした。問題はこれです:

Zend_Search_Lucene からいくつかの結果が得られ、ID が 2、3、4 の 3 つの結果が得られました。

次に、Doctrine で作成された無関係なクエリからいくつかのレコードがあり、id ID: 2 と 3 を持つ 2 つのレコードが得られます。

Search Lucene の結果は、合計 3 つのレコードとしてページに表示されます。これらのうち、ID が Docrine クエリの別の ID と等しいかどうかを確認する必要があります。つまり、一致がある場合: 2=2 、 3=3 は何かを表示し、そうでない場合: 2=3 は別のものを表示します。

FOREACH を 2 回と IF ELSE ステートメントでこれを実行しようとしていますが、ページで 2 つの結果が得られます。

foreach($this->results as $r):    //  records form search Lucene ie 2, 3, 4

    foreach($this->records2 as $r2){     // records from another table (query) 2 and 3

          if(($r2['id']) == ($r->id)) { 
                                      // do something

                            } else {
                              // dosothing else

    }

...等。

レコードが 2 回繰り返される理由は理解できますが、正しい結果を得る正しい方法はわかりません。誰か助けてくれませんか?私がしている愚かなことがあれば、私の謝罪。:)

4

2 に答える 2

3
foreach(... $r) {
  $found = false;
  foreach(... $r2) {
    if (... == ...) {
      $found = true; break;
    }
  }
  if ($found) {
    // something
  } else {
    // something else
  }
}
于 2012-05-22T09:14:37.353 に答える
0

foreachの配列$this->records2が次のようなマップの場合、内部を削除できます。

array(2 => array('id' => 2));

次に、最初の foreach 内で:

if (isset($this->records2[$r->id])) {
    // do something
} else {
    // do something else
}

このように、// do something else// do somethingはループごとに最大 1 回実行されます。

于 2012-05-22T09:18:45.607 に答える