array_unique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : array_unique

Re: array_unique

par moogli » 03 sept. 2011, 16:07

de rien

bon week end a toi aussi et bonne lecture :mrgreen:

@+

Re: array_unique

par leozoe » 03 sept. 2011, 15:09

merci a toi pour ces conseils
je vais regarder ça de + prés

bon week end

Re: array_unique

par moogli » 02 sept. 2011, 13:51

coté conception tu ne devrais pas faire de htmlentities avant insertion dans la table. Pourquoi ? parce que la t'est limité à tu html, si tu veux faire autre chose faut décoder et ensuite voir, ce qui inclus que le langage qui va lire dans la base doit forcément avoir un "html_entity_decode" c'est pas pratique XD

je pense que c'est réalisable avec une procédure stockée le tout en SQL

pour mysql http://dev.mysql.com/doc/refman/5.0/fr/ ... yntax.html
pour sql http://sqlpro.developpez.com/cours/sqlaz/techniques/#L6

@+

Re: array_unique

par leozoe » 02 sept. 2011, 08:51

Bonjour,

et oui pas si simple :roll:
oui on part du principe qu'il y a deja des infos dans toutes les tables

sinon j'avais envisagé une autre méthode, concaténer $mot_a_inserer1, sortir des boucles et faire un array_unique puis refaire une boucle a partir des mots uniques
mais je perds l'id du groupe ($id1) pour l'insertion dans la table groupe #-o
$requete = mysql_query("select titre,description from stockage_texte_mere") or die(mysql_error());
while($lignes = mysql_fetch_array($requete))
    {
			$titre = html_entity_decode($lignes["titre"]);
			$description = $lignes["description"];
			// suppression du code words
			$description = preg_replace('/<!--.*?-->/s', "", html_entity_decode($description));
			
			//récupération des mots avec accolades
			$pattern = '#\{([^{}]*)\}#msi';
			$tests = preg_match_all($pattern, $description, $out1);
			//récupération des mots entre accolades sans séparateur
			foreach($out1[0] as $id1 => $match1)
			{
					$match1 = str_replace(".","",$match1);
					$match1 = str_replace("{","",$match1);
					$match1 = str_replace("}","",$match1);
					//echo "$match1<br/>";
					$mots1 = explode('|', strtolower($match1));
					
					
            //boucle pour l'affichage des mots de + de 3 lettres trouvés
					foreach($mots1 as $j=>$mot1)
					{
							$mot_a_inserer1 = html_entity_decode(trim($mot1));
							$mot_a_inserer1 = preg_replace("/<a href(.*?)<\/a>/si", "", $mot_a_inserer1);
						        $mot_a_inserer1 = preg_replace("((https?|ftp)://\S+)",'',$mot_a_inserer1);
							$mot_a_inserer1 = preg_replace("((www).\S+)",'',$mot_a_inserer1);
							  if(strlen($mot_a_inserer1) < 4)
							  {
							  unset($mot_a_inserer1);
							  
							  }
							  $tab .= "$mot_a_inserer1*";
							  
							  
					}
			}		
	}
$tableau = explode("*",$tab);
$tableau = array_unique($tableau);
foreach($tableau as $tableaux)
{
				requetes d'insertion
				echo "$tableaux<br/>";
}

Re: array_unique

par moogli » 02 sept. 2011, 01:07

hum en fait y a matière a réflexion XD

- est ce qu'il y a déjà des info dans la table ?

avec mysql il existe replace peut être que ça peut t'aider un peu ?

faut que j'y réfléchissent mais bourrin
-select
while ( )'
extraction des synonymes
select pour chaque synonyme
insertion pour ceux qui n'y sont pas
ou une seul étape avec replace (si mysql)
}

@+

Re: array_unique

par leozoe » 01 sept. 2011, 22:15

Bonsoir,
merci de ta réponse moogli
comment créer ce tableau temporaire
oui je veux insérer dans la nouvelle table "expressions" les mots de + de 3 lettres, et dans une 2eme table "groupe" l'id du mot inséré dans la table "expression"
en fait j'ai une table qui contient des synonymes ou expressions entre crochets {la voiture|la caisse|la bagnole}
donc je fais une requête pour récupérer chaque ligne de la table
ensuite je dois séparer chaque synonyme, voir si le synonyme n'est pas présent dans une autre ligne et vérifier si le synonyme n'est pas déja présent dans la nouvelle table dans laquelle je dois l'insérer.
Pour l'instant je butte sur la façon de vérifier les doublons, array_unique aurait pu être la solution, mais dans une boucle impossible de l'utiliser.

Re: array_unique

par moogli » 30 août 2011, 21:35

tu veux pouvoir réutiliser $mot_a_inserer1 quand + de 3 lettres c'est ça ?

si oui tu les mets dans un tableau "temporaire" en utilisant in_array pour voir si le mot existe ou deja dans le tableau.
lorsque le traitement de la table est finis tu peux faire ton insertion.

a tu essayer de faire le traitement en SQL ? (y a p'tet moyen)


@+

Re: array_unique

par leozoe » 30 août 2011, 19:36

merci de vos réponses
toutes mes excuses, j'aurais du mettre le code tout de suite :oops:
un select distinct ne fera rien
$requete = mysql_query("select titre,description from stockage_texte_mere") or die(mysql_error());
while($lignes = mysql_fetch_array($requete))
    {
			$titre = html_entity_decode($lignes["titre"]);
			$description = stripslashes($lignes["description"]);
			// suppression du code words
			$description = preg_replace('/<!--.*?-->/s', "", html_entity_decode($description));
			
			//récupération des mots avec accolades
			$pattern = '#\{([^{}]*)\}#msi';
			$tests = preg_match_all($pattern, $description, $out1);
			//récupération des mots entre accolades sans séparateur
			foreach($out1[0] as $id1 => $match1)
			{
					$match1 = str_replace(".","",$match1);
					$match1 = str_replace("{","",$match1);
					$match1 = str_replace("}","",$match1);
					//echo "$match1<br/>";
					$mots1 = explode('|', strtolower($match1));
					
					
            //boucle pour l'affichage des mots de + de 3 lettres trouvés entre les séparateurs
					foreach($mots1 as $mot1)
					{
							$mot_a_inserer1 = html_entity_decode(trim($mot1));
							$mot_a_inserer1 = preg_replace("/<a href(.*?)<\/a>/si", "", $mot_a_inserer1);
						
							  if(strlen($mot_a_inserer1) < 4)
							  {
							  unset($mot_a_inserer1);
							  break;
							  }
							  
							  
					}
			}		
	}

Re: array_unique

par moogli » 30 août 2011, 19:30

salut,

sans code réponse au piff
select distinct ?

PDO et fetch_all + array_unique ?

@+

Re: array_unique

par popy » 30 août 2011, 19:23

SELECT DISTINCT ?

array_unique

par leozoe » 30 août 2011, 19:13

Bonjour,

j'extrais des valeurs d'une table pour alimenter une autre, tant qu'a faire, j'aimerais que les doublons soient enlevés
le problème c'est que la requête se fait dans une boucle, et dans une boucle un array_unique ne peut pas fonctionner
quelqu’un sait il comment procéder svp, merci