質問

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

Zend_Search_Lucene からの結果がいくつかあり、次の ID を持つ 3 つの結果が得られます。2、3、4

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

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 回繰り返される理由は理解できますが、正しい結果を得る正しい方法がわかりません。誰か助けてくれませんか?私が何か愚かなことをしているのであれば、お詫び申し上げます。:)

役に立ちましたか?

解決

foreach(... $r) {
  $found = false;
  foreach(... $r2) {
    if (... == ...) {
      $found = true; break;
    }
  }
  if ($found) {
    // something
  } else {
    // something else
  }
}
.

他のヒント

内側を排除することもできます 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 回実行されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top