/ / Speichern Sie doppelte Array-Elemente - PHP, Arrays, Sortieren, Duplikate

Speichern Sie doppelte Array-Elemente - PHP, Arrays, Sortieren, Duplikate

Ich versuche verzweifelt, das Folgende zu überwindenProblem: Aus einer Reihe von Sätzen / Nachrichtentiteln versuche ich, diejenigen zu finden, die sehr ähnlich sind (etwa 3 oder 4 Wörter gemeinsam haben) und sie in eine neue Reihe zu setzen. Also, für diese ursprüngliche Reihe / Liste:

"Title1: Hackers expose trove of snagged Snapchat images",
"Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine",
"Title3: Family says goodbye at funeral for 16-year-old",
"Title4: New Jersey officials talk about Ebola quarantine",
"Title5: New Far Cry 4 Trailer Welcomes You to Kyrat Lowlands",
"Title6: Hackers expose Snapchat images"

Das Ergebnis sollte sein:

Array
(
[0] => Title1: Hackers expose trove of snagged Snapchat images
[1] => Array
(
[duplicate] => Title6: Hackers expose Snapchat images
)

[2] => Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine
[3] => Array
(
[duplicate] => Title4: New Jersey officials talk about Ebola quarantine
)
[4] => Title3: Family says goodbye at funeral for 16-year-old
[5] => Title5: New Far Cry 4 Trailer Welcomes You to Kyrat Lowlands
)

Das ist mein Code:

    $titles = array(
"Title1: Hackers expose trove of snagged Snapchat images",
"Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine",
"Title3: Family says goodbye at funeral for 16-year-old",
"Title4: New Jersey officials talk about Ebola quarantine",
"Title5: New Far Cry 4 Trailer Welcomes You to Kyrat Lowlands",
"Title6: Hackers expose Snapchat images"
);
$z = 1;
foreach ($titles as $feed)
{
$feed_A = explode(" ", $feed);
for ($i=$z; $i<count($titles); $i++)
{
$feed_B = explode(" ", $titles[$i]);
$intersect_A_B = array_intersect($feed_A, $feed_B);
if(count($intersect_A_B)>3)
{
$titluri[] = $feed;
$titluri[]["duplicate"] = $titles[$i];
}
else
{
$titluri[] = $feed;
}
}
$z++;
}

Es gibt das folgende Ergebnis aus:

Array
(
[0] => Title1: Hackers expose trove of snagged Snapchat images
[1] => Title1: Hackers expose trove of snagged Snapchat images
[2] => Title1: Hackers expose trove of snagged Snapchat images
[3] => Title1: Hackers expose trove of snagged Snapchat images
[4] => Title1: Hackers expose trove of snagged Snapchat images
[5] => Array
(
[duplicate] => Title6: Hackers expose Snapchat images
)

[6] => Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine
[7] => Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine
[8] => Array
(
[duplicate] => Title4: New Jersey officials talk about Ebola quarantine
)

[9] => Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine
[10] => Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine
[11] => Title3: Family says goodbye at funeral for 16-year-old
[12] => Title3: Family says goodbye at funeral for 16-year-old
[13] => Title3: Family says goodbye at funeral for 16-year-old
[14] => Title4: New Jersey officials talk about Ebola quarantine
[15] => Title4: New Jersey officials talk about Ebola quarantine
[16] => Title5: New Far Cry 4 Trailer Welcomes You to Kyrat Lowlands
)

Irgendwelche Vorschläge würden sehr geschätzt!

Antworten:

1 für die Antwort № 1

Hier ist meine von @DomWeldon inspirierte Lösung ohne Duplikate:

 <?php
$titles = array(
"Title1: Hackers expose trove of snagged Snapchat images",
"Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine",
"Title3: Family says goodbye at funeral for 16-year-old",
"Title4: New Jersey officials talk about Ebola quarantine",
"Title5: New Far Cry 4 Trailer Welcomes You to Kyrat Lowlands",
"Title6: Hackers expose Snapchat images"
);
$titluri    =   array(); // unless it"s declared elsewhere
$duplicateTitles = array();
// loop through each line of the array
foreach ($titles as $key => $originalFeed)
{
if(!in_array($key, $duplicateTitles)){
$titluri[] = $originalFeed; // all feeds are listed in the new array
$feed_A = explode(" ", $originalFeed);
foreach ($titles as $newKey => $comparisonFeed)
{
// iterate through the array again and see if they intersect
if ($key != $newKey) { // but don"t compare same line against eachother!
$feed_B = explode(" ", $comparisonFeed);
$intersect_A_B = array_intersect($feed_A, $feed_B);
// do they share three words?
if(count($intersect_A_B)>3)
{
// yes, add a diplicate entry
$titluri[]["duplicate"] = $comparisonFeed;
$duplicateTitles[] = $newKey;
}
}
}
}
}

0 für die Antwort № 2

Ich denke, dieser Code könnte das sein, wonach Sie suchenfür (in den Kommentaren enthalten). Wenn nicht, lassen Sie es mich wissen - dies wurde in Eile geschrieben und ist ungetestet. Vielleicht möchten Sie sich auch eine Alternative dazu ansehen - die verschachtelte foreach-Schleife verursacht wahrscheinlich Leistungsprobleme auf einer großen Site.

<?php

$titles = array(
"Title1: Hackers expose trove of snagged Snapchat images",
"Title2: New Jersey officials order symptom-less NBC News crew into Ebola quarantine",
"Title3: Family says goodbye at funeral for 16-year-old",
"Title4: New Jersey officials talk about Ebola quarantine",
"Title5: New Far Cry 4 Trailer Welcomes You to Kyrat Lowlands",
"Title6: Hackers expose Snapchat images"
);
$titluri    =   array(); // unless it"s declared elsewhere
// loop through each line of the array
foreach ($titles as $key => $originalFeed)
{
$titluri[] = $originalFeed; // all feeds are listed in the new array
$feed_A = explode(" ", $originalFeed);
foreach ($titles as $newKey => $comparisonFeed)
{
// iterate through the array again and see if they intersect
if ($key != $newKey) { // but don"t compare same line against eachother!
$feed_B = explode(" ", $comparisonFeed);
$intersect_A_B = array_intersect($feed_A, $feed_B);
// do they share three words?
if(count($intersect_A_B)>3)
{
// yes, add a diplicate entry
$titluri[]["duplicate"] = $comparisonFeed;
}
}
}
}