Page 1 sur 1

Besoin d'info tableaux Array

Posté : 20 févr. 2015, 00:04
par keush
Bonjour,
$collection[c][lvr][t] = "Collection navets" ;
$collection[c][lvr][u] = ROOT_NAVETS ;
echo $titre = $collection[c][lvr][t]
J'ai découvert la possibilité d'utiliser les crochets avec des variables et je trouve ça plutôt pas mal.
Mais s'agit-il d'un tableau malgré l'absence de déclaration array ? Sinon, comment construire un tableau avec les valeurs ci-dessus ?
Comment faire au plus simple pour ajouter d'autre collection (gruyère, enclume, etc.) sans répéter à chaque fois $collection[c][gru][t], etc. ?

Une dernière question concernant les tableaux array, comment faire s'afficher plusieurs variable du tableau à la suite sans être obligé de réécrire print_r à chaque fois ? Voici le code :
  $ref = array (
        'a' => $f = substr($_GET['x'], 0, 3), 
        'b' => $g = substr($_GET['x'], 1, 2), 
        'c' => $h = substr($_GET['x'], 7, 4), 
        'd' => $i = substr($_GET['x'], 13, 1), 
        'e' =>  $j = substr($_GET['x'], 25, 4) 
);

   print_r ($ref[a][b][c]);
Le print_r avec les crochets à la suite ne fonctionne pas.

Merci !

Re: Besoin d'info tableaux Array

Posté : 20 févr. 2015, 09:48
par sirakawa
Bjr,
Construction du tableau:
Va voir http://php.net/manual/fr/language.types.array.php
c'est relativement clair ; tu peux remplcer les var_dump($array); par print_r($array);
Ou
déclaration
1 dimension à indices numériques
$t = array();
//et plus loin remplissage
$t[712] = "un texte";

print "$t[712]"; // à quoi je préfère 
$val = $t[712];
print "$val";
2 dimensions
$t2 = array();
...
$t2[1][1] = 11;
$t2[1][2] = 12;1][2]
$val = $t2[1]{2];
print "$val";
Avec indices texte
<?PHP

$t3 = array();
//...
$t3[1]['nom'] = "toto";
$t3[1]['dimension'] = 123;
$t3[4]['nom'] = "cuicui";
$t3[4]['dimension'] = 19;
print_r($t3);
?>
$t3

Re: Besoin d'info tableaux Array

Posté : 20 févr. 2015, 09:49
par @rthur
Mais s'agit-il d'un tableau malgré l'absence de déclaration array ?
Il s'agit bien d'un tableau. C'est l'avantage du PHP où le développeur n'a pas besoin de typer explicitement ses variables, PHP va se débrouiller tout seul pour s'adapter et ça fonctionne bien dans 99% des cas. :D
Comment faire au plus simple pour ajouter d'autre collection (gruyère, enclume, etc.) sans répéter à chaque fois $collection[c][gru][t], etc. ?
Pas sur de comprendre la question, mais si tu fonctionnes par collection, effectivement tu peux faire des tableaux multidimensionnels :
$collection['navets'][]="navet blanc";
$collection['navets'][]="navet noir";
$collection['gruyeres'][]="gruyère AOP Suisse";
$collection['gruyeres'][]="gruyère d'alpage";
$collection['gruyeres'][]="gruyère bio";
$collection['enclumes'][]="enclume de forgeron";
$collection['enclumes'][]="enclume de cordonnier";
Les crochets vides indiquent à PHP d'ajouter dans le tableau $collection['navets'], l'élément navet blanc, puis un deuxième pour les navets noir, etc...
Au final ton tableau $collection va contenir 3 éléments dont la clé est : navets, gruyeres et enclumes qui sont chacun eux-même des tableaux et qui contiennent leur propres éléments. $collection['navets'] va contenir 2 élements dont la valeur est navet blanc et navet noir

Une dernière question concernant les tableaux array, comment faire s'afficher plusieurs variable du tableau à la suite sans être obligé de réécrire print_r à chaque fois ? Voici le code :
  $ref = array (
        'a' => $f = substr($_GET['x'], 0, 3), 
        'b' => $g = substr($_GET['x'], 1, 2), 
        'c' => $h = substr($_GET['x'], 7, 4), 
        'd' => $i = substr($_GET['x'], 13, 1), 
        'e' =>  $j = substr($_GET['x'], 25, 4) 
);

   print_r ($ref[a][b][c]);
Le print_r avec les crochets à la suite ne fonctionne pas.
Pour afficher tous les éléments d'un tableau :
   print_r ($ref);
Mais si tu veux faire un affichage propre, il vaut mieux faire une boucle avec foreach :
foreach ($ref as $element_tablo) {
     print $element_tablo."<br />";
}

Re: Besoin d'info tableaux Array

Posté : 20 févr. 2015, 12:48
par keush
Merci pour toutes ces réponses ! Je vais étudier pour les tableaux...

Concernant l'affichage des éléments du tableau. Si je ne veux afficher que [a] [c] [e], dois-je écrire print_r pour chaque éléments ?
print_r($ref[a]) ; print_r($ref[c]); print_r($ref[e])
N'est-il pas possible d'afficher tout les éléments à la suite avec un seul print_r ?
print_r ($ref[a][c][e]
=> ne fonctionne pas.

Quel est l'intérêt d'afficher tous les éléments d'un tableau avec une boucle plutôt qu'un simple print_r ou echo ?

Merci.

Re: Besoin d'info tableaux Array

Posté : 20 févr. 2015, 13:23
par @rthur
print_r(), n'est en général utilisé que pour du debug car il t'affiche de façon brute la composition de ton tableau, or pour un utilisateur tu voudras probablement quelque chose de plus travaillé graphiquement d'où l'utilisation du foreach.

Re: Besoin d'info tableaux Array

Posté : 20 févr. 2015, 15:56
par sirakawa
Plussifions:
print_r(), n'est en général utilisé que pour du debug car il t'affiche de façon brute la composition de ton tableau, or pour un utilisateur tu voudras probablement quelque chose de plus travaillé graphiquement d'où l'utilisation du foreach.
print_r ou var_dump ne servent que pour vérifier rapidement que la variable concernée contient bien ce qu'on croit. Quand il s'agit d'un gros tableau, surtout multidimensionel, l'affichage en est très vite pénible à lire. S'applique toujours à un tableau avec comme paramètre son nom; une seule lgne pouvant être un tableau..
Tu as toujours intérêt à extraire les éléments afin de les afficher proprement
Supposons qe $tablo soit un tableau à deux dimensions
print "<table> <tr>";
foreach ($tablo as $ligne)
{
$elem1= $ligne[0];
$elem2= $ligne[1];
$elem3= $ligne[2];
// ici tu peux mettre print_r($ligne); pour voir...
print "<td>$elem1</td><td>$elem2</td><td>$elem3</td></tr>";
}
print "</table>";

Re: Besoin d'info tableaux Array

Posté : 21 févr. 2015, 12:13
par keush
$collection['navets'][]="navet blanc";
$collection['navets'][]="navet noir";
$collection['gruyeres'][]="gruyère AOP Suisse";
$collection['gruyeres'][]="gruyère d'alpage";
$collection['gruyeres'][]="gruyère bio";
$collection['enclumes'][]="enclume de forgeron";
$collection['enclumes'][]="enclume de cordonnier";
Merci pour ce code, @rthur, mais comment faire pour récupérer les données du tableau ?
J'ai essayé echo $menu[0]; à tout hasard mais ça ne fonctionne pas :(

Meri.

Re: Besoin d'info tableaux Array

Posté : 21 févr. 2015, 13:03
par keush
J'ai trouvé comment faire. Je donne l'info à qui passerait par là...
    $menu['pays'][0]="Canada";
    $menu['pays'][1]="Islande";

    foreach ($menu as $t) {
        print $t[1]."<br />";
         print $t[0]."<br />";
    }
Pour extraire la clef, il faut utiliser key :
echo key($menu)