[RESOLU] array_unique() qui ne fonctionne pas bien ?

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 : [RESOLU] array_unique() qui ne fonctionne pas bien ?

Re: array_unique() qui ne fonctionne pas bien ?

par wwwbillgates » 15 oct. 2014, 14:52

Alors ca y est j'ai trouvé !
Grace à la fonction que tu ma donné j'ai trouvé qu'il s'agissait de retour chariot et saut de ligne. Du coup je me suis rendu compte que j'utilisai mal le trim car je l'ai fais sur le array au lieu de le faire sur les résultats. Donc si sa peut aider, pour faire un trim sur chaques entrés d'un array il faut faire :
function TrimArray(&$value) {
    $value = trim($value);
}

$array_keywords = explode("\n", $keywords);
				
array_walk($array_keywords, 'TrimArray');

sort($array_keywords);			
print_r(array_unique($array_keywords));
Merci beaucoup pour votre aide qui ma orienté dans la bonne direction et ma permis de comprendre mon erreur.

Re: array_unique() qui ne fonctionne pas bien ?

par Aureusms » 15 oct. 2014, 13:33

Il te faut comprendre pourquoi et quels caractères spéciaux n'est pas retiré.
Utilise ord() ou mb_ord() pour obtenir le code Ascii du caractères qui t'embête. (http://php.net/manual/fr/function.ord.php)

Il ya un exemple sur cette page qui te permet de donner tous les caractères ASCII d'une chaine (n°4)

Re: array_unique() qui ne fonctionne pas bien ?

par wwwbillgates » 15 oct. 2014, 13:25

Hum effectivement il y a des caractère invisibles en trop pour chaques entrées, hormis la dernière, celle qu'il ne vois pas comme doublon :

array (size=7)
0 => string 'a' (length=2)
1 => string 'c' (length=2)
2 => string 'f' (length=2)
3 => string 'r' (length=2)
4 => string 'c' (length=2)
5 => string 'a' (length=2)
6 => string 'a' (length=1)

Merci pour cette fonction que je ne connaissai pas, mais d'où peut alors bien venir ces caractères invisible, et comment m'en débarasser vu que le trim() n'a pas l'air de fonctionner ? :|

Re: array_unique() qui ne fonctionne pas bien ?

par Aureusms » 15 oct. 2014, 11:53

Bonjour,

Pas exactement : le doublon "a" a été trouvé . C'est comme ci "b" != "b".
On va vérifier le type de variable enregistré :
echo '<pre>'; 
echo var_dump(array_unique($array_keywords)); 
echo '</pre>';
Les balises <pre> permettent de conserver l'indentation, c'est juste pour l'affichage.

Re: array_unique() qui ne fonctionne pas bien ?

par yann18 » 15 oct. 2014, 11:52

avec \n c'est sûr que les espaces sont pris en compte.
à la place de print_r, essaies avec var_dump pour voir la taille de chaque string:

$array_keywords = explode("\n", $keywords);
$tbl = array_unique(array_map('trim', $array_keywords));
var_dump($tbl);

Re: array_unique() qui ne fonctionne pas bien ?

par wwwbillgates » 15 oct. 2014, 11:47

Alors pour :

Array
(
[0] => a
[1] => d
[2] => f
[3] => a
[4] => b
[5] => b
)

Avec un array_unique() j'obtiens :

Array
(
[0] => a
[1] => d
[2] => f
[4] => b
[5] => b
)

Et si j'utilise sort() de tel sorte :
sort($array_keywords);
print_r(array_unique($array_keywords));
car print_r(array_unique(sort($array_keywords))); créé une erreur, alors j'obiens le résultat dans lordre alphabétique simplement :

Array
(
[0] => a
[2] => b
[3] => b
[4] => d
[5] => f
)

Une idée ?

Re: array_unique() qui ne fonctionne pas bien ?

par Aureusms » 15 oct. 2014, 00:17

Essayes de le trier avant pour voir :
print_r(array_unique(sort($array_keywords)));

array_unique() qui ne fonctionne pas bien ?

par wwwbillgates » 14 oct. 2014, 18:37

Bonjour, je marache les cheuveux avec array_unique() qui ne fonctionne pas bien. En effet j'ai :

foreach($array_keywords AS $keywords_separation) {
	if (isset($keywords_ensemble)) {
		$keywords_ensemble = $keywords_ensemble . "\n" . $keywords_separation;
	}
	else {
		$keywords_ensemble = $keywords_separation;
	}						
}
dans un textarea pour l'affichage. Ensuite j' en récupère un POST dans une autre page et je fais :
$array_keywords = explode("\n", $keywords);
print_r(array_unique($array_keywords));

Et là tous les doublons deviennent uniques hormis les 2 derniers lorsqu'ils se trouvent à la fin de mon array ?
J'ai bien essayé de mettre un trim() à droite à gauche au cas ou, mais rien ne change ? :?

Voici par exemple se que j'obtiens :

Array
(
[0] => a

[2] => u

[5] => b

[6] => b
)

tous ont disparu, hormis les 2 de la fin...