avoir des valeur unique dans un tableau (preg_match_all)

Mammouth du PHP | 558 Messages

06 août 2011, 01:58

Bonjour, j'ai rechercher plusieurs solutions mais je n'arrive a rien.
Je voudrais que preg_match_all ne me retourne que des valeurs uniques.
Ceci avant traitement dans une base de donnée.
Le problème que j'ai dans ce code provient de la récupération des valeurs du tableau.
merci
<?php
$sitevisite='http://www.larosedelorient.com';
$site=file_get_contents($sitevisite);
//on recherche les lien de la page
preg_match_all('#<a.+href="(.+)"#iU',$url);
$url1=array_unique($url[1]);
?>

Eléphanteau du PHP | 39 Messages

06 août 2011, 02:36

Je ne suis pas sûr d'avoir bien compris ... mais voyant le code, j'ai compris que tu voulais afficher tous les liens qui est sur la page web, mais tu en affiches que un.

Tu dois faire une boucle pour tout afficher voici un exemple :
    $page = file_get_contents('http://www.le site web.com');
    preg_match_all
    (
    'Ta Regex (expression régulière)',
    $page,
    $page_array
    );
    

    $array = count($page_array[0]);
    while($array !=0 )
    {
           $array --;
           echo '<a href="'.$page_array[$array].'" >Voici un lien '.$page_array[$array].'</a>
           <br/> ';
    }
Si j'ai mal compris ta question, essais d'être plus clair stp
“We spend money that we do not have, on things we do not need, to impress people who do not care.”
― Will Smith

devlop78
Invité n'ayant pas de compte PHPfrance

06 août 2011, 04:25

non $url1 devrait être bon mais il est un tableau. Si tu as des "doublons" ce ne sont pas exactement les mêmes (ou alors il y a un beug dans array_unique).

Mammouth du PHP | 558 Messages

07 août 2011, 00:14

bonjour,
Tout d'abord merci à Blowingfish et à devlop78.
Tout fonctionne le dedoublonnage s'effectue correctement mais dans ma boucle while je n'arrive pas a en sortir tous les liens.
J’ai oublié une partie du code sorry.
Le break s'active au premier lien car la valeur de $url1[1] à été supprimé par array_unique et je n'arrive pas à redéfinir la suite numérique.
$url1[0]=page1.htm
$url1[1]=page1.htm //Cette valeurs a été supprimer et mon break; entre en action prématurément.
$url1[2]=page2.htm
Et ce que je voudrais faire c’est :
$url1[0]=page1.htm
$url1[1]=page2.htm
$url1[2]=page3.htm etc...
Chose que je n'arrive pas à faire.
merci
$sitevisite='http://www.larosedelorient.com';
$site=file_get_contents($sitevisite);
//on recherche les lien de la page
preg_match_all('#<a.+href="(.+)"#iU',$site,$url);
$url1=array_unique($url[1]);
$i=0;
while($url1){//on fait une boucle sur les lien
$url2=@$url1[$i];
$i++;
if(@$url1[$i]==''){break;}
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 août 2011, 00:43

c'est parce que tu ne sais pas parcourir un tableau correctement :)

ce que tu fait est plus que risqué (d'ailleurs t'a un soucis) et sémantiquement incorrect !

utilise la boucle foreach pour parcourir le tableau !

d'ailleurs ce que tu fait ne fait qu'affecter le dernier élément de ce tableau à la variable $url2; autant prendre directement ce dernier élément (soit count -1 soit un array_pop)


@+
Il en faut peu pour être heureux ......