Remplir un array multi dimensions

Résolu
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009
-
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009
-
bonjour,

je dois réalisé une petite application pour remplir un tableau à plusieurs dimensions avec des info venant d'une table mysql

Mon tableau dois ressembler à cela :

$GLOBALS['administration']=array(
 "titre1"=>array("lien1",array("user1","user2","user3")),
 "titre2"=>array("lien2",array("user1","user2")),
 "titre3"=>array("lien3",array("user1","user2","user3","user4"))
 ...
);

je sais remplir un tableau à une dimension mais je vois pas trop comment faire pour ce cas -ci
while($row=$db->row())
{
array_push($array_global,$row['titre']);
}
echo '';
print_r($array_global); //Affiche Array()
echo '

';

merci d'avance pour votre aide

10 réponses

Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

bonjour,

je l'utilise souvent pour remplir des tableaux

J'ai toujour un soucis mais je me rapproche d'une solution car l'autre que j'ai donner plus haut n'est pas bonne.
le premier tableau devrait être indicé avec le titre mais il me met des incide classique (0,1,2,..)
Je dois avoir un prob dans la première boucle
voici le code
$array_global=array();
$array_titre=array();
 $db= new db(USERNAME,PASSWORD,DATABASE,HOSTNAME);
 $db->query("SELECT * FROM ariane WHERE `parentID`=8 ORDER BY titre ASC");
 $t=0;
 while($row=$db->row())
 {
 $array_titre[$row['titre']] = array ();
  $db2= new db(USERNAME,PASSWORD,DATABASE,HOSTNAME);
  $db2->query("SELECT * FROM ariane WHERE `parentID`=8 AND ID=".$row['ID']." ORDER BY titre ASC");
  while($row=$db2->row()){
  array_push($array_titre[$row['titre']],$row['url']);
  $array_users = array ();
   //1°réalisation d'un tableau avec acces de l'admin
   $db_acces=new db(USERNAME,PASSWORD,DATABASE,HOSTNAME);
   $db_acces->query("SELECT `nom`,`module` FROM users_test");
    while( $row_acces=$db_acces->row())
    {
     $explode=explode(";",$row_acces['module']);//tableau avec acces de l'admin
      for($h=0;$h<(count($explode)-1);$h++)
      {
       if($explode[$h]==$row['ID']){
       //remplir table avec les users
       array_push($array_users,$row_acces['nom']);
       }
      }
    }
    $db_acces->destroy();
  //rempli la table url avec la table users
  array_push($array_titre[$row['titre']],$array_users);
  //rempli la table globale avec la table users
  array_push($array_global,$array_titre[$row['titre']]);  
  }
 $t++;
 }//while1
$GLOBALS['administration']=$array_global; 

Array
(
    [0] => Array //cette indice devrait être un titre ex [titre1]=>array
        (
            [0] => /admin/fruit/fruit.php
            [1] => Array
                (
                    [0] => Krafft
                    [1] => Noel
                    [2] => Cors
                )

        )

    [1] => Array //cette indice devrait être un titre ex [titre2]=>array
        (
            [0] => /admin/pdt/pdt.php
            [1] => Array
                (
                    [0] => Krafft
                    [1] => Noel
                )

        )

merci d'avance
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Hello,

ben où est le problème ?
$array[$row['titre']] = array ();
tu auras tes clefs déjà. Après, tes liens et tes users, je sais pas trop d'où tu les pêches donc on peut guère t'aider plus loin.
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

bonjour,

merci pour ce coup de main

les liens (sous la forme :http:// ... ) et users (sous la forme :1;5;6;8; que j'explode pour récupérer un nom)  viennent aussi d'un base.
Je sais pas trop si ç comme çà?
$array_global=array();

while($row=$db->row())
{
array_push($array_global,$row['titre']);
$array[$row['titre']] = array ();
   while($row=$db1->row())
   {
   array_push($array[$row['titre']] ,$row['liens']);

      while($row=$db2->row())
      {
      array_push($array_global,$row['users']);
      }
   }
}

merci d'avance
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Ben essaye lol...mais à priori oui c'est ça
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Heu nan attends j'avais mal lu!!

$array_global=array();

while($row=$db->row())
{
$array_global[$row['titre']] = array ();
   while($row1=$db1->row())
   {
   $array_global[$row['titre']] = array ($row1['liens'] => array ());

      while($row2=$db2->row())
      {
      $array_global[$row['titre']][$row1['liens']][] = $row2['users'] ;    
      }
   }
}

mais à mon avis, tu peux tout avoir en 1 seule requête.
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

Merci pour ton aide

Je pense avoir la solution
elle m'affiche:
Array
(
    [0] => titre1
    [1] => Array
        (
            [0] => lien1
            [1] => Array
                (
                    [0] => users1
                    [1] => user2
                )

        )

    [2] => titre2
    [3] => Array
        (
            [0] => lien2
            [1] => Array
                (
                    [0] => user1
                    [1] => user2

                )

        )
)

Par contre est ce logique les indices des titres?

merci pour ton aide
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Tu as fait quel code ?
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

bonjour,

encore un grand merci pour ton aide et le temp que tu y consacres.
voici le code il est court donc je met tout :

require_once($_SERVER['DOCUMENT_ROOT'].'/phplib/layout.php');
session_start();//test
 //get_header(68);
$table='ariane';
$array_global=array();
 $db= new db(USERNAME,PASSWORD,DATABASE,HOSTNAME);
 $db->query("SELECT * FROM $table WHERE `parentID`=8 ORDER BY titre ASC");
 $t=0;
 while($row=$db->row())
 {
 array_push($array_global,$row['titre']);
 $array_url = array ();
 $array_prenom = array ();
  $db2= new db(USERNAME,PASSWORD,DATABASE,HOSTNAME);
  $db2->query("SELECT * FROM $table WHERE `parentID`=8 AND ID=".$row['ID']." ORDER BY titre ASC");
  while($row=$db2->row()){
  $array_users = array ();
  //rempli la table titre avec la table des link
  array_push($array_url,$row['url']);
   //1°réalisation d'un tableau avec acces de l'admin
   $db_acces=new db(USERNAME,PASSWORD,DATABASE,HOSTNAME);
   $db_acces->query("SELECT `nom`,`module` FROM users_test");
    while( $row_acces=$db_acces->row())
    {
     //echo $t.$row_acces['nom'].':'.$row_acces['module'].'
';
     $explode=explode(";",$row_acces['module']);//tableau avec acces de l'admin
      for($h=0;$h<(count($explode)-1);$h++)
      {
       if($explode[$h]==$row['ID']){
       //echo $explode[$h].'
';
       //remplir table avec les users
       array_push($array_users,$row_acces['nom']);
       }
      }
    }
    $db_acces->destroy();
  array_push($array_url,$array_users);
  array_push($array_global,$array_url);  
  }
 $t++;
 }//while1
$GLOBALS['administration']=$array_global; 
echo '';
print_r($GLOBALS['administration']); //Affiche Array()
echo '

';
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Pourquoi tu t'obstines avec array_push...?
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

j'avais fait une erreur
c'est  $array_global à chaque fois
$array_global[$row['titre']] = array ();
au lieu de
$array_titre[$row['titre']] = array ();

merci infiniment pout ton aide
à bientot