【问题标题】:Only unique elements in an array只有数组中的唯一元素
【发布时间】:2020-01-17 14:47:29
【问题描述】:

有一个提要,我从中接收数据,有时其中会出现非常相似的记录。 https://dl4.joxi.net/drive/2020/01/17/0028/2950/1842054/54/5abb738180.jpg

我想确保数组包含最独特的记录。 (按标题定义)

代码:


$new = array();
$goodFeed = array();

$itemlimit=0;
$itemlimit2=0;


foreach ($feed->get_items() as $item) {
    if ($itemlimit==50) { break; };
    $new[] = strtolower(trim($item->get_title()));
    $itemlimit = $itemlimit + 1;
}

foreach ($feed->get_items() as $item) {
    if ($itemlimit2==50) { break; };
    $itemTitle = strtolower(trim($item->get_title()));

    foreach($new as $item2) {
        similar_text($item2, $itemTitle, $percent);

        if ($percent < 78 && !in_array($item, $goodFeed)) {
                $goodFeed[] = $item;
                echo 'added: ' . $item->get_title() . '<br>Procent: ' . $percent . '<hr>';

        }
    }

    $itemlimit2 = $itemlimit2 + 1;
}

我只希望唯一值(最少 80%)保留在 $goodFeed 数组中。现在它包含彼此非常相似的元素。 原始提要包含具有名称的元素:

1. Metro Redux on Nintendo Switch™ Announce Trailer; 
2. Metro Redux on Nintendo Switch™ Announce Trailer [NA]; 
3. Metro Redux für Nintendo Switch™ Ankündigungs-Trailer [DE]; 
4. Metro Redux on Nintendo Switch™ Announce Trailer [ANZ]; 
5. The Elder Scrolls Online: The Dark Heart of Skyrim Announcement Cinematic;
6. The Elder Scrolls Online - The Dark Heart of Skyrim Cinematic Announcement Trailer

他们都进入$goodFeed,我只想要这些:

1. Metro Redux on Nintendo Switch™ Announce Trailer
5. The Elder Scrolls Online: The Dark Heart of Skyrim Announcement Cinematic 

谢谢!

【问题讨论】:

  • 你能解释一下你的代码在做什么而不是在做你想让它做的事情吗?
  • @IncredibleHat 我只希望唯一值(最少 80%)保留在 $goodFeed 数组中。现在它包含彼此非常相似的元素。最初的 fida 有以下元素: 1. Nintendo Switch™ 公告预告片上的 Metro Redux; 2. Metro Redux für Nintendo Switch™ Ankündigungs-Trailer [DE]; 3. Nintendo Switch™ 上的 Metro Redux 宣布预告片 [ANZ]; 4. 上古卷轴OL:《天际的黑暗之心》预告片; 5. The Elder Scrolls Online - Skyrim 电影公告预告片的黑暗之心 他们都进入了 $goodFeed,我只想要这些:1 和 4

标签: php arrays loops similarity


【解决方案1】:
I have not tested but I think one of these should work for you.

foreach ($feed->get_items() as $item) { 
    if(!strtolower(trim($item->get_title())),$new){
        if ($itemlimit==50) { break; };
        $new[] = strtolower(trim($item->get_title()));
        $goodFeed[] = $item;
        $itemlimit = $itemlimit + 1;
    }
}

-------OR-------

foreach ($feed->get_items() as $item) { 
    if(!strtolower(trim($item->get_title())),$new){
        if(count($new)>0){
            $percent=0;
            foreach($new as $n){
                similar_text($n, strtolower(trim($item->get_title())), $percent);
                if($percent>78){
                    break;
                }
            }
            if($percent>78){
                    continue;
            }

            if ($itemlimit==50) { break; };
            $new[] = strtolower(trim($item->get_title()));
            $goodFeed[] = $item;
            $itemlimit = $itemlimit + 1;
        }
        else{
            $new[] = strtolower(trim($item->get_title()));
            $goodFeed[] = $item;
            $itemlimit = $itemlimit + 1;
        }
    }
}

【讨论】:

    【解决方案2】:

    问题在于解析器没有传输正确的提要。回收了数组结构,现在它可以工作了。我也从这里获得了想法 - Similarity algorithm advice, using two dimensional associative array

    如果有人知道可以将提要合并为一个的良好且仍受支持的 RSS 解析器(NodeJs、Php),如果您能链接到它,我将不胜感激。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多