doublon et tableau

Nicolas21000
Invité n'ayant pas de compte PHPfrance

07 janv. 2011, 12:59

Bonjour,
J'ai un tableau : J'aimerai retirer les doublons du tableau (ici les 2 [email protected]) et les placer dans un autre tableau.
Le résultat serai :
J'ai essayé plein de fonctions php array_unique, array_diff, array_intersect mais j'ai pas trouvé de solution.

Merci d'avance.

ViPHP
xTG
ViPHP | 7331 Messages

07 janv. 2011, 13:56

<?php
	$t1 = array('t1','t2','t3','t4','t3','t5');
	$t2 = array_unique($t1);
	echo"<pre>";print_r($t2);echo"</pre>";
	$t3 = array_diff_assoc($t1,$t2);
	echo"<pre>";print_r($t3);echo"</pre>";
	$t = array_diff($t2,$t3);
	echo"<pre>";print_r($t);echo"</pre>";
?>
Array
(
[0] => t1
[1] => t2
[2] => t3
[3] => t4
[5] => t5
)

Array
(
[4] => t3
)

Array
(
[0] => t1
[1] => t2
[3] => t4
[5] => t5
)
;)

ViPHP
ViPHP | 2577 Messages

07 janv. 2011, 14:12

Bonjour,

Tu peux utiliser la donnée comme clé du tableau
$t1['[email protected]'] = '';
$t1['[email protected]'] = ''
...
Suivi d'un foreach ($t1 as $k=>$v) {$t2[] = $k ;

Nicolas21000
Invité n'ayant pas de compte PHPfrance

07 janv. 2011, 15:20

Merci xTG, c'est presque ce que je veux. Le problème c'est que je veux récupérer les deux doublons dans les tableau t3 comme ceci :

Code : Tout sélectionner

Array ( [0] => t1 [1] => t2 [2] => t3 [3] => t4 [5] => t5 ) Array ( [2] => t3 [4] => t3 ) Array ( [0] => t1 [1] => t2 [2] => t4 [3] => t5 )
Et pour le dernier tableau, c'est possible de ré-initialiser les clés comme ci-dessus ?
Encore merci.

Nicolas21000
Invité n'ayant pas de compte PHPfrance

07 janv. 2011, 15:25

Désolé j'ai même pas pris le temps de chercher avant de demander, apparemment pour réinitialiser les clé c'est array_values. Il reste plus qu'a trouver un moyen de récupérer le deuxième doublon.

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

07 janv. 2011, 16:05

hum pourquoi avoir plusieurs fois la même infos dans le tableau ?

au pire l'info en clef et un chiffre pour en indiquer le nombre ?

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

ViPHP
xTG
ViPHP | 7331 Messages

07 janv. 2011, 17:27

hum pourquoi avoir plusieurs fois la même infos dans le tableau ?

au pire l'info en clef et un chiffre pour en indiquer le nombre ?

@+
Je me posais la même question, c'est pour ça que je me suis pas amusé à trouvé une solution. :/

Savoir combien de fois il a été trouvé ? Tu devrais dans ce cas pouvoir le faire pour chaque champs retourné ($t) en lui appliquant un array_intersect() avec le premier tableau. Si je ne me trompe pas cela te retournera uniquement le champs ciblé, et donc plusieurs fois vu qu'il y est plusieurs fois dans le premier tableau.

ViPHP
ViPHP | 2291 Messages

15 janv. 2011, 14:24

Salut,

Moi je ferais ceci
<?php
/*
Array1(
    [0] => [email protected]
    [1] => [email protected]
    [2] => [email protected]
    [3] => [email protected]
    [4] => [email protected]
)
*/


$array_emails = array('[email protected]',
                      '[email protected]',
                      '[email protected]',
                      '[email protected]',
                      '[email protected]');

$array_unique = array_unique($array_emails);

$doublon = (array_diff_key($array_emails, $array_unique));



      foreach($doublon AS $dl)
      {
      	unset($array_unique[array_search($dl, $array_unique)]);
      }

/**
//Affichage

Array
(
    $doublon
    [4] => [email protected]
)

Array
(
    $array_unique
    [0] => [email protected]
    [1] => [email protected]
    [3] => [email protected]
)
*/
?>
Si j'ai bien capter l'idée :)
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 2291 Messages

15 janv. 2011, 17:25

Salut,
Ou une autre version pour avoir exatement se que tu demande.
$array_emails = array('[email protected]',
                      '[email protected]',
                      '[email protected]',
                      '[email protected]',
                      '[email protected]' );

$counts = array_count_values($array_emails);

	foreach($counts AS $k => $count)
	{
		if($count != 1)
		{
			for ($i=0; $i<$count; $i++) {
              $doublon[] = $k;
            }

		}
		else
		{
			$tab[] = $k;
		}
	}
L'idée est simplement de compter les valeurs, et si une valeur est différente de 1 cela veux dire qu'il est en doublon, donc le traitement est simple après
Affiche ceci
Array
(
    [0] => [email protected]
    [1] => [email protected]
    [2] => [email protected]
)

*****************
Array
(
    [0] => [email protected]
    [1] => [email protected]
)

ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.