tableau associatif multidimensionel

tableau associatif multidimensionel - Perl - Programmation

Marsh Posté le 02-11-2006 à 14:04:39    

bonjour tous,
les hash et autres tableaux, ça commence à me rendre :pt1cable:
 
je récupère des données d'une base mysql et je veux construire un tableau qui sera :
 
%tab[site][lien]=[nom, url]
 
et ensuite lire en faisant une boucle genre pour lister tous les lien->url de chaque site
 
for $i (1 .. 10) {
   while(($key, $val) = each(%tab[$i])){
         print "$key, $val";
   }  
}
 
mais bon voilà, je suis perdu dans un monde multidimensionel d'associations de hash et tableaux :whistle:
Comment ajouter à %tab[db->site] le tableau %tab2[db2->lien] contenant lui-même le tableau %lien = (nom, url)
 
Je pense à séparer en un tableau contenant tous les "lien" par site tab[site]=lien  
puis un autre tab2[lien]=[nom, url]
 
si je peux avoir un coup de main...

Reply

Marsh Posté le 02-11-2006 à 14:04:39   

Reply

Marsh Posté le 03-11-2006 à 08:24:01    

Bon. pour être plus claire, voici mon bout de code :
 
 while ($data = $sth->fetchrow_hashref()) {
 $nb_liens++;
 # test url
 $etat = &check_url($data->{'url'});  
 if ($etat eq "ok" ){
  $nb_ok++;
 } else {
  push(@bad, $data->{'site_id'});
  push @{ $tab_bad[$data->{'site_id'}] }, $data->{'lien_nom'}, $data->{'url'}; ##### ET LA CA MARCHE PAS
  $nb_bad++;
 }  
 }
 
et appelle du tableau :
 foreach $id (@bad) {
 $list_l = '';
  foreach $t ($tab_bad[$id]){
  $list_l .= "$lname - $lurl \n"; ###### ET LA NON PLUS FORCEMENT
 }
 }

Reply

Marsh Posté le 05-11-2006 à 23:56:36    

Il ne faut pas confondre table de hash et tableau
 

Code :
  1. my $site_list = {};
  2. while ($data = $sth->fetchrow_hashref()) {
  3. $nb_liens++;
  4. # test url
  5. $etat = &check_url($data->{'url'});
  6. if ($etat eq "ok" ){
  7.  $nb_ok++;
  8. } else {
  9.                 my $h = {};
  10.                 #on index chaque url par nom
  11.                 $h->{$data->{'lien_nom'}} = $data->{'url'};
  12.                 #on index par site (Faire une cle non numerique c'est mieux)
  13.                 $site_list->{$data->{'site_id'}} = $h;
  14. }
  15. }
  16. $nb_bad = scalar(keys %$site_list);
  17. for my $id (keys %{$site_list}) { #en perl 6 plus de foreach
  18.         my $list_l;
  19.  for my $name (keys %{$site_list->{$id}}){
  20.                 $list_l .= "$name - " . $site_list->{$id}->{$name} . "\n";
  21.         }
  22. }


 
J'ai pas teste... J'avais la fleme, a une ou deux erreurs de syntaxe ca doit etre bon.

Reply

Marsh Posté le 09-11-2006 à 16:15:52    

ah!
OK
je teste ça
 
Merci

Reply

Marsh Posté le 14-11-2006 à 11:56:49    

en fait j'ai mis % à la place de $ pour site_list et h
Sans ça, j'avais qu'un seul lien même pour les sites ayant plusieurs liens faux.
Avec ça, le problème est que ça liste tous les liens faux à chaque site.
 
j'ai mis $list_l = ''; avant le "for my $id" mais ça ne change rien.
 
moi je cherche à lister uniquement, mais tous, les liens faux à chaque site.
 
si qqun voit d'où ça vient...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed