2017-09-10 1 views
0

J'ai besoin d'aide avec un pense que je devrais faire. J'ai deux tableaux avec des URL par exemple:Comparer les tableaux d'urls et supprimer d'un tableau urls dépendent du second tableau

$urls = ['https://test.com/', 'http://example.com/', 'https://google.com/']; 

$urlsFromOtherSource = ['https://test.com/', 'https://example.com/', 'https://facebook.com/']; 

J'ai besoin de créer trois tableaux d'URL là. Le premier d'entre eux aura des URL communes des deux tableaux. Deux autres seront les mêmes que si dans ce tableau de deux initiales j'ai la même URL mais la différence est seulement dans http - https je dois attribuer cette URL seulement à un tableau.

donc de mon exemple deux tableaux i besoin d'obtenir des tableaux de la manière suivante:

$commonUrls = ['https://test.com/']; //becouse i have only this url in two arrays 


$urls = ['http://example.com/', 'https://google.com/']; //'http://example.com/ I leave in this array this url and remove from second table becouse in second array i have the same- difference is only in https 


    $urlsFromOtherSource = ['https://facebook.com/']; //remove from this array https://example.com/ becouse this url is in first array- difference is only in http 

J'ai essayé de penser comment puis-je comparer les tableaux et attraper la différence de http-https, mais il est pas facile pour moi. Mon apparence de code comme ceci:

$urls = ['https://test.com/', 'http://example.com/', 'https://google.com/']; 

$urlsFromOtherSource = ['https://test.com/', 'https://example.com/', 'https://facebook.com/']; 

     $commonUrls = array_intersect($urls, $urlsFromOtherSource);//here I have common urls from both arrays 
     $urls = array_diff($urls, $commonUrls);//I remove from this array urls which i have in common array 
     $urlsFromOtherSource = array_diff($urlsFromOtherSource, $commonUrls);//I remove from this array urls which i have in common array 


     foreach ($urlsFromOtherSource as $url) { 
      $landingPageArray[] = preg_replace(["#^http(s)?://#", "#^www\.#"], ["", ""], $url); 
     } 

     foreach ($urls as $url) { 
      $landingPage = preg_replace(["#^http(s)?://#", "#^www\.#"], ["", ""], $url); 
      if (in_array($landingPage, $landingPageArray)) { 
       $httpDifference[] = $url; 
      } 
     } 
     //I havent idea how can I remove from $urlsFromOtherSource urls which I have in $urls array and where difference is only in http-https 
     $urlsFromOtherSource = array_diff($urlsFromOtherSource, $httpDifference); 

Tout ce que je besoin est de comparer les tableaux et retirer du deuxième urls de tableau que j'ai en première rangée et la différence entre cette URL est seulement http-HTPPS. Peut-être que quelqu'un peut m'aider à trouver un algorithme pour ça.

MISE À JOUR Je dois retirer aussi de urlsFromOtherSource si j'ai cette URL dans commonUrls:

commonUrls: array(1) { 
    [0]=> 
    string(17) "http://www.test.com/" 
} 



urlsFromOtherSource: array(1) { 
    [2]=> 
    string(21) "http://test.com/" 
} 

donc je dois retirer de urlsFromOtherSource cette URL. Et faire ce code comparer automatiquement que la page d'atterrissage quoi que ce soit http://www ou www ou seulement http: // Je besoin compare pas cela dans mes tableaux

+0

Commander 'array_diff()' http://php.net/manual/en/function.array-diff.php – Calimero

+0

salut Je sais que cette fonction mais cela ne Aidez moi. J'ai besoin d'un algorithme qui peut me permettre de comparer des URL similaires ou de supprimer des URL similaires à partir d'un tableau Je pense que vous n'avez pas lu tous mes messages parce que ces URL ne sont pas les mêmes je dois vérifier http-https status – johnyT

+0

J'espère que cela aide: '$ commonUrls = array_intersect ($ urls, $ urlsFromOtherSource); $ urls = array_diff ($ urls, $ commonUrls); $ urlsFromOtherSource = array_diff ($ urlsFromOtherSource, $ commonUrls); $ urlsFromOtherSource = array_diff ($ urlsFromOtherSource, $ urls) ' – Memristor

Répondre

2

Vous pouvez écrire votre propre fonction de comparaison en utilisant les méthodes u, comme array_udiff et array_uintersect . Utilisez preg_replace lorsque vous comparez les URL pour ignorer la différence avec http/https.

$commonUrls = array_intersect($urls, $urlsFromOtherSource);//here I have common urls from both arrays 

$urls = array_diff($urls, $commonUrls); 

$urlsFromOtherSource = array_udiff(array_diff($urlsFromOtherSource, $commonUrls), $urls, function ($a, $b) { 
    return strcmp(preg_replace('|^https?://(www\\.)?|', '', $a), preg_replace('|^https?://(www\\.)?|', '', $b)); 
}); 

Cela donne:

commonUrls: array(1) { 
    [0]=> 
    string(17) "https://test.com/" 
} 

urls: array(2) { 
    [1]=> 
    string(19) "http://example.com/" 
    [2]=> 
    string(19) "https://google.com/" 
} 

urlsFromOtherSource: array(1) { 
    [2]=> 
    string(21) "https://facebook.com/" 
} 
+0

mais s'il vous plaît aidez-moi avec mon code après la mise à jour dans mon premier poste, je dois supprimer «www» aussi, j'ai essayé de combiner avec votre code, mais j'ai échoué. – johnyT

+0

Pourriez-vous m'aider la dernière fois avec ça. J'ai toujours besoin de vérifier http et www et ne pas répéter les URL dans n'importe quel tableau – johnyT

+0

J'ai mis à jour ma réponse de sorte qu'il ignore maintenant 'http' /' https' et 'www.'En comparaison. –