0

ユーザーがデータベースに保存されているメッセージをタグで検索できる入力フィールドを備えた簡単な検索関数を作成したいと思います。

問題は、関数がタグが一致するメッセージではなく、すべてのメッセージを返すことです。

これが私の試みです:

  public function getMatches($tagsGiven) {
  $mergedTagArray = array();
  $messageToTag = array();

  $messageRepo = $this->messageRepository->findAll(); // all messages from DB

  $messageTagsArray = explode(',', $tagsGiven); // tags given by the user

  foreach ($messageRepo as $oMessage) {
    $messageTag = $oMessage->getMessageTags(); // get tags from all messages   
    $storeTagsUnseri = unserialize($messageTag); // unserialize tags given by the user

    if (!in_array($messageTagsArray,$storeTagsUnseri)) {  //if tags from user matches tags from DB messages
      $messageToTag[] = $oMessage->getMessageText();     // get the message text from the DB message and store it in array
    }
  }
  return $messageToTag;     // return all message texts matching
}

}

どうもありがとうございます!

よろしくお願いします

編集

if (array_intersect($messageTagsArray,$storeTagsUnseri)) {}

それでうまくいきました。

4

2 に答える 2

0

dbに処理を任せる必要があります。

   SELECT message FROM YourDB WHERE message like '%tagName%'
于 2013-01-03T14:49:06.890 に答える
0

コメントで述べたように、オブジェクトが配列にないかどうかを確認しようとしています。そのようにすることはできません。最初にオブジェクトをarratに変換する必要があります。したがって、多次元配列を期待しない場合は、これをコードに追加してください。

 $storeTagsUnseri = unserialize($messageTag);
 $storeTagsUnseri = (array)($storeTagsUnseri);

または単に行う:

 $json  = json_encode($storeTagsUnseri);
 $$storeTagsUnseriarray = json_decode($json, true);

そして、array_intersect()よりも

于 2013-01-03T14:59:17.933 に答える