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

好的,正如我在评论中提到的那样,您正在尝试查看对象是否不在数组中。你不能那样做,你必须先将你的对象转换为 arrat。因此,如果您不期望多维数组,请将其添加到您的代码中:

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

或者只是这样做:

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

而不是array_intersect()

于 2013-01-03T14:59:17.933 回答
0

您需要让数据库为您进行处理。

   SELECT message FROM YourDB WHERE message like '%tagName%'
于 2013-01-03T14:49:06.890 回答