在preg_match_all搜索后如何从多维数组中删除重复项?

时间:2019-01-07 15:52:37

标签: php mysql duplicates

我正在尝试从多维数组中删除重复项。我已经阅读了一些相关的问题,并尝试采用super_unique方法,但是它不起作用。

我正在通过使用preg_match_all查找文本模式来从数据库生成结果。问题是preg_match_all在每次匹配时都给我一个数组中的新条目,但我只想要一个。 (我尝试切换到preg_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_unique摆脱所有重复项(例如,从数据库中获得具有相同“ shortword”值的条目),但是当我运行它时,它给出的结果与super_unique位相同不在那里。

包括真实数据会有些不知所措,但是我将尝试对其进行模拟。假设$ episodenav恰好是12,数据库的一行看起来像

shortword =“骄傲” 字=“傲慢与偏见” essay =“这是一篇有关“傲慢与偏见”的文章(U 12),其引用的格式将被preg_match_all两次(U 12)接受。 definitions =“一堆也可能具有与preg_match_all搜索(U 12)匹配的引用的定义。”

因此,在执行preg_match_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";

在当前代码中,我为“骄傲”获得了三个条目,但我只想要一个。

0 个答案:

没有答案