Page 1 sur 1

Au sujet du Topic "Problème avec un tableau." (Détéré 2007)

Posté : 17 juil. 2011, 12:06
par Uzi
Bonjour à tous,

Etant tombé par chance sur ce Topic datant du début de 2007, vu qu'il s'agit d'un de mes soucis rencontrés rencontrés récemment en PHP, je souhaiterai avoir plus d'informations sur la solution proposé par Raptor:
$tab3 = $tab1;
foreach($tab2 as $tab) {
  if (!in_array($tab,$tab3)) $tab3[]=$tab;
}
Les solutions de Ryle quant à elles, ne semblaient pas fonctionner mieux hélas (bien que ce furent ces functions qu'il me semblait plus logique d'utiliser pour mon cas):
array_merge( array_diff($tab1, $tab2), array_diff($tab2, $tab1) );
Je me demandais alors si le problème ne venait pas de ma façon de définir mes tableaux. Elle était la suivante:
global $i;
	$i=0;
	$datas = array();
	while ( $datas[$i] = mysql_fetch_assoc($req)) {
		$i++;
	}	// end while
	unset ($datas[$i]);	// cleaning just the last empty array
En effet l'utilisation du mysql_fetch_assoc ne créerait-elle pas de "vrais" tableaux dans le sens où ce sont des chaînes str. de caractères pures et simples ?
Je veux dire par là, que dans le foreach, on utilise tout simplement des chaînes str. de caractères, tandis qu'avec les functions array_unique, array_merge et array_diff, on travaille sur des tableaux (Array), leurs clés (key) et leurs valeurs (value).

Est-ce que dans le code que j'utilise, l'utilisation de tableaux multidimensionnaux $datas[$i] (des tableaux dans des tableaux ou quelque chose comme ça) n'empêcherait-elle pas l'utilisation correcte des functions suggérées par Ryle ?

Merci d'avance pour toutes vos réponses.

P.S.: Pardonnez-moi si je formule un peu mal le problème.

Uzi

Re: Au sujet du Topic "Problème avec un tableau." (Détéré 2007)

Posté : 17 juil. 2011, 14:44
par Ryle
Il faudrait voir un peu plus en détail ce que tu souhaites faire... :)

Les fonction mysql_fetch_* retournent bien des tableaux et non pas des chaines... donc dans ta constructions actuelle, cela signifie que $datas[0] contient un tableau, $datas[1] contient un tableau, ... $datas[N] contient un tableau.

La question est donc surtout de savoir ce que tu veux comparer et à quoi, ainsi que la façon dont tu les compares :)

Re: Au sujet du Topic "Problème avec un tableau." (Détéré 2007)

Posté : 17 juil. 2011, 16:52
par Invité
Merci de votre réponse,

J'avais deux tableaux $datas_1 et $datas_2
formé chacun à l'aide de boucles (while) du type:
while($data[x] = mysql_fetch_assoc($req_x)) {
// procédure x
}
Et ce que je souhaitais faire c'est exactement cela:
$a = array('one','two');
$b = array('three','four','five');

//not a union of arrays' values
echo '$a + $b : ';
print_r ($a + $b);

//a union of arrays' values
echo "array_unique(array_merge($a,$b)):";
// cribbed from http://oreilly.com/catalog/progphp/chapter/ch05.html
print_r (array_unique(array_merge($a,$b)));

//output

$a + $b : Array
(
    [0] => one
    [1] => two
    [2] => five
)
array_unique(array_merge(Array,Array)):Array
(
    [0] => one
    [1] => two
    [2] => three
    [3] => four
    [4] => five
)
(L'exemple se trouve ici)

Le problème était que je suis obligé de passé par un foreach pour obtenir le résultat de la fusion des deux tableaux, en ré-indexant les doublons qu'en une seule entrée.
Du coup, je me demandais si j'avais réellement des tableaux...

Quand je faisais un array_unique(array_merge()), avec un print_r() je n'avais qu'une valeur stockée, et c'était la valeur 1 qui se trouvait dans les deux tableaux à la fois (tout comme sa même clé). Toutes les autres valeurs passaient à la trappe...
Lorsque je faisais un array_merge j'avais des doublons en sorties.

Re: Au sujet du Topic "Problème avec un tableau." (Détéré 2007)

Posté : 17 juil. 2011, 16:54
par Invité
Ah zut, j'ai envoyé ma réponse trop vite.

Dans l'extrait que j'ai donné le résultat que je souhaitais obtenir c'est le second exemple d'union de tableaux en faisait un array_unique(array_merge()).
Je ne me suis rendu compte que trop tard que je ne pouvais pas éditer mon message pour laisser que l'exemple concerné.