Remplir un array multi dimensions

Résolu
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009 - 23 août 2006 à 11:36
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009 - 24 août 2006 à 12:21
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

mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
24 août 2006 à 12:06
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
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 août 2006 à 12:53
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.
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
23 août 2006 à 14:53
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 août 2006 à 15:04
Ben essaye lol...mais à priori oui c'est ça
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 août 2006 à 15:31
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.
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
23 août 2006 à 16:12
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 août 2006 à 17:50
Tu as fait quel code ?
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
24 août 2006 à 09:46
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 '

';
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 août 2006 à 11:18
Pourquoi tu t'obstines avec array_push...?
0
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
24 août 2006 à 12:21
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
0
Rejoignez-nous