如何在preg\u match\u all搜索后从多维数组中删除重复项?

doinxwow  于 2021-06-15  发布在  Mysql
关注(0)|答案(0)|浏览(171)

我正在尝试从多维数组中删除重复项。我读了一些相关的问题,并试图适应一个超级独特的方法,但它不工作。
我使用preg\u match\u all查找文本模式,从数据库生成结果。问题是preg\u match\u all在数组中为每个匹配都提供一个新条目,但我只需要一个(我试着切换到preg\u match,但我无法让它工作。)我在这里阅读了关于重复数据消除的讨论,从中,我尝试了以下代码,但它仍然保留了重复的内容。

$query = "SELECT shortword,word,essay,definitions FROM lexicon;";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
$num_results = mysql_num_rows($result);

$results = array();
for ($i = 0; $i < $num_results; $i++) {
    $row = mysql_fetch_array($result);
    $newtext=   $row["essay"]." ".$row["definitions"];
    if (preg_match_all("/(\<i\>U\<\/i\>|U) $episodenav\D/", $newtext, $matches)) {
        foreach ($matches[0] as $match) {
            $match = ltrim(strip_tags($match), "U ");
            // array pseudo key is the float value of $match
            // add '_key' member for usort()
            $row['_key'] = floatval($match);
            $results[] = $row;
        }
    }
}

function super_unique($results) {
  $result = array_map("unserialize", array_unique(array_map("serialize", $results)));

  foreach ($result as $key => $value)
  {
    if ( is_array($value) )
    {
      $result[$key] = super_unique($value);
    }
  }

  return $result;
}

我想使用super\u unique来消除所有的重复项(例如,数据库中具有相同值“shortword”的条目),但是当我运行这个时,它会给出相同的结果,就好像super\u unique位不在那里一样。
包括真实的数据会有点让人不知所措,但我会尝试模拟它。假设$eposodenav正好是12,数据库的一行看起来像
shortword=“pride”word=“pride and prediction”assession=“这是一篇关于《傲慢与偏见》(U12)的文章,它的引用格式将由preg\u match\u all两次(U12)检索。“definitions=”一组定义,也可以有与preg\u match\u all search(U12)匹配的引用。”
因此,在preg\u match\u all搜索之后,我的数组将有三个shortword=“pride”条目,我想根据每个shortword创建一个包含条目的列表。它结束于以下步骤:

// ... then display stuff in order
foreach($results as $row) {
    $row['_key'] = number_format((float)$row['_key'], 0, '', '');    echo '<p class="textmark_result">' . (string)$row['_key'] . ' (episode as whole)';
    echo '  <a href="../Pivot/lexiconentry.php?shortword=' 
. $row["shortword"] . '">' . $row["word"] . '</a>';
    echo "</p>\n";

在当前代码中,我得到三个“pride”条目,但我只想要一个。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题