Eliminer redondance entre 2 tableaux

Orion
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:02

Bonjour,
J'ai un problème qui requiert votre longue experience de programmeur.
Je souhaite enlever les redondances entre 2 tableaux j'ai donc pensé dans un premier temps à réunnir les 2 tableaux (array_combine) et à utiliser la fonction array_unique() mais la fonction array_combine ne permet la fusion que de deux tableaux de même taille, ce qui n'est pas mon cas.
J'ai essayé autre chose sans succes:

             if(file_exists($file)) {                              

			$lignes= file ($file); 
			foreach($lignes as $ligne) {  
				
                                   if(file_exists($files)) {                              

						$line= file ($files); 
						foreach($line as $lin) {  

                                                      	if($ligne!==$lin){
									echo "$lin";


Voilà il n'y a pas tout le code mais le principal, le problème est que cela ne fonctionne pas du tout car la comparaison se fait ligne par ligne donc même les redondances apparaisent, ainsi que la même ligne répétée autant de fois qu'il ya de ligne dans un autre fichier.
Bref j'aimerai savoir il existe des fonctions permettant de fisionner des tableaux de tailles différentes.
Et si possible d'éliminer les rédondances lorsque celles ci font plus de 2 lignes par exemple.
Voilà j'espere m'être exprimé le plus clairement possible
Merci d'avance pour votre aide
Cordialement
Orion

ViPHP
ViPHP | 5462 Messages

12 avr. 2010, 16:05

tu veux faire quoi enfaites exactement ? y'a quoi dans t'es fichiers ?

Orion
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:06

Du texte en ligne, et donc en comparant ces 2 fichiers éliminer toutes les lignes qui sont similaires

ViPHP
ViPHP | 5462 Messages

12 avr. 2010, 16:09

juste 2 fichiers ?

Orion
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:10

Oui

ViPHP
ViPHP | 5462 Messages

12 avr. 2010, 16:10

$out = array_intersect(file($file1), file($file2));

Orion
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:14

Cette fonction array_intersect n'est pas cessé renvoyer justement les éléments identiques que l'on retrouve dans les 2 tableaux?

ViPHP
ViPHP | 5462 Messages

12 avr. 2010, 16:16

diff alors :wink:
$out = array_diff(file($file1), file($file2));

Orion
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:26

Alors cette fonction là ne renvoie que les éléments du tableau 1 qui ne sont pas dans le tableau 2 mais pas les éléments du tableau 2 qui ne sont pas dans le premier.
En effectuant les 2 fonctions c'est peut être possible mais n'existe t-il pas une fonction permettan de faire les 2 à la fois.
$out = array_diff(file($file1), file($file2));
$put = array_diff(file($file2), file($file1));
$output=$out.$put;

Mammouth du PHP | 672 Messages

12 avr. 2010, 16:27

diff ne renvoit que ce qui est dans $file1 et pas dans $file2. Il faut encore trouver qe qui est dans $file2 et pas dans $file1...
:non:

Par contre, en cherchant un peu on trouve ça qui a l'air de correspondre.
Il faut toujours lire les commentaires de php.net :wink:

ViPHP
ViPHP | 5462 Messages

12 avr. 2010, 16:31

c'est pourtant explicite dans la doc
array_diff() compare le tableau array1 avec le tableau array2 et retourne la différence.

y'a pas de truc dans 1 et de truc dans 2, une différence c'est une différence peu importe l'ordre

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

12 avr. 2010, 16:33

une différence c'est une différence peu importe l'ordre
Ah non ! :non:

Orion
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:34

L'exemple semble montrer le contraire

ViPHP
ViPHP | 5462 Messages

12 avr. 2010, 16:35

une différence c'est une différence peu importe l'ordre
Ah non ! :non:
oui j'ai dis une connerie :priere: , (j'etais rester sur mon intersect)

ViPHP
ViPHP | 5462 Messages

12 avr. 2010, 16:38

sinon tu fusionnes et tu dé-doublonnes
$out = array_unique(array_merge(file($file1), file($file2)));