Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2008, 09h34   #1
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
Par défaut [Tableaux] Différence entre deux syntaxes

Bonjour,

j'ai un tableau dans du code php, jusque là tout va bien.

Maintenant, quand j'écris ceci :

Code :
$tableau_login[] = array(labels => ",Login");
j'aurai le mot "Array" qui s'affiche dans la première case de mon tableau.

Si j'écris simplement :

Code :
$tableau_login = array();
alors mon tableau n'est plus bien mis en forme comme je le souhaite, mais le "Array" ne s'affiche plus et j'obtiens bien uniquement les valeurs que je veux.

Quelqu'un saurait-il me dire la différence entre ces deux syntaxes et le pourquoi du "Array" ?
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 09h39   #2
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
salut
Citation:
$tableau_login[] = array(labels => ",Login");
sauf erreur de ma part, la syntaxe ci-dessus crée un tableau dans un autre tableau. C'est à dire que la première valeur contenu dans ton $tableau_login est un tableau de longueur 1 (array(labels => ",Login").

Citation:
$tableau_login = array();
ceci crée simplement un tableau vide.

peut être que ce que tu veux faire c'est :
Code :
$tableau_login['labels'] = "Login";
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 09h45   #3
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
En faisant un var_dump avec la première syntaxe, j'obtiens effectivement une première ligne avec "Login" comme valeur.

Et pour la solution que tu as proposé en dernier, je n'affiche pas que des login dans mon tableau, mais deux liens à côté de chaque case (ce qui me donne pour une ligne "login - lien 1 - lien 2".

Et je ne comprends pas pourquoi une syntaxe m'affiche "Array" en fait, je vois pas d'où il sort. Dès que je passe à la seconde, hop il n'y est plus oO

[EDIT]

Je viens de regarder plus en détail le var_dump :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 	

array(4) {
  [0]=>
  array(1) {
    ["labels"]=>
    string(6) ",Login"
  }
 [1]=>
  array(4) {
    ["descD"]=>
    int(1)
    ["valC1"]=>
    array(1) {
      ["labels"]=>
      string(6) ",Login"
    }
    ["val2"]=>
    string(66) "Modi"
    ["val3"]=>
    string(67) "PDF"
  }
  [2]=>
  array(4) {
    ["descD"]=>
    int(2)
    ["valC1"]=>
    string(6) "unloginparmidautres"
    ["val2"]=>
    string(67) "Modi"
    ["val3"]=>
    string(68) "PDF"
  }
Et j'ai une case Array dans le tableau parce que j'ai ce morceau de code qui s'affiche alors que je ne sais pas pourquoi. Enfin je suppose que ça vient d'ici :/
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h20   #4
Membre actif
 
Inscription : mars 2002
Messages : 202
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 202
Points : 151
Points : 151
Salut,
c'est normal quela première syntaxe t'affiche Array. Comme le dit julien.63, tu crées un tableau de tableaux.
Donc chaque case de ton tableau contient un tableau.
Si tu fais un affichage classique du genre echo, php affiche "Array", ce qui est vrai. Si tu veux afficher le contenu du tableau contenu dans la première case (ça va, ça suit ?), tu fais un print_r(tableau[x]) ou bien tu dois faire une boucle

Pour ce que tu veux faire, je pense que tu dois effectivement créer un tableau de tableaux :
tableau[]=array(login, lien1, lien2).
Et tu peux ensuite faire :
Code :
1
2
3
4
5
6
 
foreach(tableau as $k => soustableau) {
   foreach(soustableau as $k2 => $v) {
      echo $v //1er passage : login, 2ème et 3ème passage : les liens
   }
}
jibouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h25   #5
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
En fait, comme code j'ai fait ceci (je supprime les doublons au passage (merci kifouillou)):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
$R = split(',', $R['login']);
foreach($R as $login)
{
   	$login = trim($login);
       if(!in_array($login, $tableau_login))
       {
        	$tableau_login[] = $login;
       }
}
}
$j = 1;
foreach($tableau_login as $login)
{
	if ($login == '') ;
	else 
	{
		$tableau_login[$j] = array(descD => $j,
		valC1 => $login,
		val2  => '<A HREF=start.php3?Action=cpt&Etape=Form&Val='.$login.'><B>Modi</B></A>',
		val3  => '<A HREF=start_pdf.php?Action=cpt&Etape=PDF&Val='.$login.'><B>PDF</B></A>',
		);
	$j++;
	}
}
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h31   #6
Membre actif
 
Inscription : mars 2002
Messages : 202
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 202
Points : 151
Points : 151
Et donc ?
jibouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h36   #7
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
et ben donc je pensais que ce code fonctionnait, sans qu'il m'affiche un array ... il fonctionne parfaitement en créant le tableau_login = array(),et si je mets tableau_login[] avec labels=> login, paf ça ne fonctionne plus et ça m'affiche ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 	

array(4) {
  [0]=>
  array(1) {
    ["labels"]=>
    string(6) ",Login"
  }
  [1]=>
  array(4) {
    ["descD"]=>
    int(1)
    ["valC1"]=>
    array(1) {
      ["labels"]=>
      string(6) ",Login"
    }
    ["val2"]=>
    string(66) "Modi"
    ["val3"]=>
    string(67) "PDF"
  }
  [2]=>
  array(4) {
    ["descD"]=>
    int(2)
    ["valC1"]=>
    string(6) "unpseudo"
    ["val2"]=>
    string(67) "Modi"
    ["val3"]=>
    string(68) "PDF"
  }
Qu'il m'affiche la première partie du code, d'accord, la dernière avec le "unpseudo" d'accord, mais la partie centrale je ne vois pas pourquoi elle apparait comme ça, malgré ce que vous avez dit :/
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h47   #8
Membre actif
 
Inscription : mars 2002
Messages : 202
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 202
Points : 151
Points : 151
1. Le code php que tu nous as montré est faux (} en trop) ;
2. Le tableau de ton dernier message ne correspond forcément pas au code de l'avant dernier ;
3. $tab[]=array($x,$y) signifie que tu mets un tableau (contenant 2 valeurs $x et $y) dans la dernière case de $tab ;
4. Si le mot array te gène, ne l'affiches pas !
jibouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h48   #9
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
peux tu essayer ce code (j'ai pas testé)
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
$tableau = array_unique( split(',', $R['login']) );
$tabLen = count($tableau);
for ($i=0; $i < $tabLen; $i++){
$tableau_login[] = array( 'descD' => $i,
			  'valC1' => trim($tableau[$i]),
		          'val2'  => '<A HREF=start.php3?Action=cpt&Etape=Form&Val='.$tableau[$i].'><B>Modi</B></A>',
			  'val3'  => '<A HREF=start_pdf.php?Action=cpt&Etape=PDF&Val='.$tableau[$i].'><B>PDF</B></A>',
			);
}
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 10h55   #10
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
Ce code ne m'enlève pas les doublons sur mon tableau :/ mais par contre le Array ne s'affiche plus =).

Citation:
1. Le code php que tu nous as montré est faux (} en trop) ;
2. Le tableau de ton dernier message ne correspond forcément pas au code de l'avant dernier ;
3. $tab[]=array($x,$y) signifie que tu mets un tableau (contenant 2 valeurs $x et $y) dans la dernière case de $tab ;
4. Si le mot array te gène, ne l'affiches pas !
1. C'est une erreur de copié/collé ça désolée !
2. le code de mon dernier message c'est quand je fais le var_dump pour qu'il m'affiche la structure de mon tableau créé, alors que le code d'avant correspond au tableau en lui même
3. où ça ? je n'ai pas compris là :/
4. ben c'est ce que je cherche à faire justement ...
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 12h00   #11
Membre actif
 
Inscription : mars 2002
Messages : 202
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 202
Points : 151
Points : 151
Pour l'erreur, c'est ce que je pensais, on oublie.
D'accord pour le 2., alors ça veut dire qu'au moment où tu fais :
"$R = split(',', $R['login']);" il y a déjà une couille dans $R['login']
Et donc, quand tu fais un split de $R['login'], tu récupères un tableau dont l'une des cases est un tableau.
Citation:
$tab[]=array($x,$y) signifie que tu mets un tableau (contenant 2 valeurs $x et $y) dans la dernière case de $tab ;

Par exemple :
$tab=array("bonjour", 12, array(0,1), "chou-fleur");
est un tableau dont le 3ème élément est un tableau de 2 éléments.

Pour le 4ème point, ce que je veux dire c'est que tu peux afficher autrement qu'en faisant simplement un print_r ou une fonction du même tonneau.
Pour afficher différemment, tu peux faire une jolie boucle avec des echo dedans. Mais je suis d'accord, ça ne changera pas le fait que tu as des tableaux dans ton tableaux principal.

A ta place, je commencerais par afficher $R au tout début, et $R['login'] pour voir si ça correspond bien à ce que tu veux.
jibouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 12h02   #12
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
Ah d'accord merci ^^

Pour les echo, je ne peux pas en afficher dans mon code (c'est pas moi qui veut pas c'est la hiérarchie :p), je vais essayer d'afficher $R et $R['login'] comme tu m'as dit et voir ce que ça donne.

EDIT : quand j'affiche $R il m'affiche "array" et quand j'affiche $R['login'] il m'affiche tous les login que je veux (en ne se préoccupant pas des doublons mais ça c'est normal)
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 12h53   #13
Membre actif
 
Inscription : mars 2002
Messages : 202
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 202
Points : 151
Points : 151
Essaies d'afficher en faisant print_r($R['login']).
jibouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 13h23   #14
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
En faisant print_r($R['login']) dans mon code j'obtiens bien la liste de mes pseudos non dédoublonnés.

Mais je ne peux pas mettre ceci dans mon tableau même car une fois écrite la syntaxe pour mon tableau (le code écrit plus haut), j'ai une fonction qui le transforme en beau tableau (qui le design mieux quoi). Donc aucun echo/print dans le code lui même :/
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 15h08   #15
Membre Expert
 
Avatar de darkstar123456
 
Inscription : mars 2008
Messages : 1 180
Détails du profil
Informations personnelles :
Âge : 28
Localisation : Belgique

Informations forums :
Inscription : mars 2008
Messages : 1 180
Points : 1 357
Points : 1 357
Envoyer un message via Skype™ à darkstar123456
hmmm perso j'suis un peu perdu par rapport au sujet de base. Tu pourrais rappeler brièvement ce que tu voudrais et ce qui ne va pas (en remettant les fonctions telles qu'elles sont maintenant) stp ?
darkstar123456 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 15h18   #16
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
Pas de problème =)

Je crée un tableau :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
$tableau_login[] = array(labels => ",Login");
 
$R = split(',', $R['login']);
foreach($R as $login)
{
    	$login = trim($login);
       if(!in_array($login, $tableau_login))
        {
        	$tableau_login[] = $login;
        }
}
 
$j = 1;
 
foreach($tableau_login as $login)
{
	if ($login == '') ;
 
	else 
	{
		$tableau_login[$j] = array(descD => $j,
		valC1 => $login,
		val2  => '<A HREF=start.php3?Action=cpt&Etape=Form&Val='.$login.'><B>Modi</B></A>',
		val3  => '<A HREF=start_pdf.php?Action=cpt&Etape=PDF&Val='.$login.'><B>PDF</B></A>',
		);
		$j++;
	}
}
Si je le crée comme ça, ça fonctionne MAIS dans la première case de mon tableau, à la ligne 1 s'affiche le mot "Array".

Si maintenant, au lieu de :
Code :
$tableau_login[] = array(labels => ",Login");
je mets :
Code :
$tableau_login = array();
alors le mot "Array" disarait, MAIS mon tableau n'est plus mis en forme du tout comme il le faudrait.

En faisant un var_dump j'obtiens ceci comme structure de mon tableau :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
array(4) {
  [0]=>
  array(1) {
    ["labels"]=>
    string(6) ",Login"
  }
  [1]=>
  array(4) {
    ["descD"]=>
    int(1)
    ["valC1"]=>
    array(1) {
      ["labels"]=>
      string(6) ",Login"
    }
    ["val2"]=>
    string(66) "Modi"
    ["val3"]=>
    string(67) "PDF"
  }
  [2]=>
  array(4) {
    ["descD"]=>
    int(2)
    ["valC1"]=>
    string(5) "unlogincorrespondant"
    ["val2"]=>
    string(66) "Modi"
    ["val3"]=>
    string(67) "PDF"
  }
Que la première partie s'affiche, c'est normal vu que ça correspond au labels => Login, que la dernière partie s'affiche c'est normal puisque c'est ce que je veux obtenir le login, mais à quoi correspond cette partie centrale qui apparement m'affiche le mot Array et a l'air de créer un petit tableau encore à l'intérieur oO ???

J'aimerai juste garder mon code qui marche très bien (il supprime mes doublons et mes '') mais sans afficher le mot Array dans la première case du tableau et qu'il m'affiche donc que les login.
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 15h33   #17
Membre Expert
 
Avatar de darkstar123456
 
Inscription : mars 2008
Messages : 1 180
Détails du profil
Informations personnelles :
Âge : 28
Localisation : Belgique

Informations forums :
Inscription : mars 2008
Messages : 1 180
Points : 1 357
Points : 1 357
Envoyer un message via Skype™ à darkstar123456
$tableau_login = array();

et

$tableau_login[] = array();

ne veulent pas dire la même chose ! Le premier sert d'instance de variable (ça permet de la reset aussi d'ailleurs) alors que le deuxième va créer un sous-tableau dans la première "case" vide disponible

Sinon pour ton problème, je crois que c'est assez simple :

Code php :
1
2
3
4
5
6
 
$j = 1;
/// encore des trucs ici ensuite ^^
// ...
 
$tableau_login[$j] = array(descD => $j, /// .... et encore des trucs après

voilà ce que tu écris... donc en fait, il va aller te rajouter un tableau dans $tableau_login[1] (c'est ça le sous-tableau que tu vois )

En plus de ça, PHP ne respectant pas le scope, le fait d'utiliser deux fois la variable "$login" dans la même page peut mener vers des erreurs...

Je ne sais pas trop si j'ai répondu à ta question mais sinon 2 foreach() comme ça, je pense qu'il y aurait moyen d'améliorer tout ça en faisant plus court, mais pour cela il faudrait que tu décrives d'avantage de quoi tu pars et pour arriver où ^^
darkstar123456 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 15h41   #18
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
Citation:
Je ne sais pas trop si j'ai répondu à ta question
Ah bah si /me a compris =)

Et du coup, est-ce qu'il y a un moyen pour passer directement à l'élément "intéréssant" et passer outre ce cas "vide" ?

Le code écrit pour créer mon tableau me permet d'enlever les doublons présents (comme par exemple deux logins didentiques). Il fonctionne bien donc si je ne le change pas ça me va quand même. J'aimerai juste ne pas afficher le Array.

Y'a-t-il un moyen sinon de caser quelque chose du genre : if (lacase = Array ou = '') alors on passe à l'élément suivant ? (au final, faire la même chose que pour l'élément null mais pour le cas "Array" ? )

Code :
1
2
3
4
5
if ($login == '') ;
 
	else 
	{ // Mon tableau qui se crée si l'élément n'est pas ' '
}
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 15h45   #19
Membre Expert
 
Avatar de darkstar123456
 
Inscription : mars 2008
Messages : 1 180
Détails du profil
Informations personnelles :
Âge : 28
Localisation : Belgique

Informations forums :
Inscription : mars 2008
Messages : 1 180
Points : 1 357
Points : 1 357
Envoyer un message via Skype™ à darkstar123456
Yep, tu as la fonction is_array()

donc voici : (je fais une petite optimisation, car écrire $login == "" et ne rien faire équivaut à faire $login != "" et faire qqch )

Code php :
1
2
3
4
 
if ( !empty($login) && !is_array($login) ) {
 // Mon tableau qui se crée si l'élément n'est PAS VIDE et n'est PAS un TABLEAU
}
darkstar123456 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2008, 15h49   #20
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 684
Points : 226
Points : 226
J'avais testé le != '' mais ça ne fonctionnait pas oO

Bon alors ton code marche :p c'est génial ! Sauf que là j'obtiens du coup 3 warnings provenant d'une des librairies dont je me sers :

Code :
1
2
3
4
5
 
 
Warning: Variable passed to reset() is not an array or object in ...
Warning: Variable passed to key() is not an array or object in ...
Warning: Variable passed to each() is not an array or object in ...
et apparemment ce serait mon $tableau_login qui n'est pas apprécié ? oO
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h08.


 
 
 
 
Partenaires

Hébergement Web