pierrickg Posté(e) le 3 novembre 2006 Partager Posté(e) le 3 novembre 2006 bonjour tous, les hash et autres tableaux, ça commence à me rendre je récupère des données d'une base mysql et je veux construire un tableau qui sera : %tab[site][lien]=[nom, url] en faisant: 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 je récupère avec foreach $id (@bad) { $list_l = ''; foreach $t ($tab_bad[$id]){ $list_l .= "$lname - $lurl \n"; ###### ET LA NON PLUS FORCEMENT } } 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... Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 4 novembre 2006 Partager Posté(e) le 4 novembre 2006 heu, c'est du php+mysql, ça... ça irait plutôt dans l'autre sous-section, non ? pour le deplacement Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 4 novembre 2006 Partager Posté(e) le 4 novembre 2006 C'est plutôt du perl+mysql et je c'est pas forcément pour faire un site je récupère des données d'une base mysql et je veux construire un tableau qui sera :%tab[site][lien]=[nom, url] Si ça commence par un %, ce n'est pas un tableau, mais une table de hashage. push(@bad, $data->{'site_id'}); push @{ $tab_bad[$data->{'site_id'}] }, $data->{'lien_nom'}, $data->{'url'}; ##### ET LA CA MARCHE PAS Ok, la première ligne est claire, tu met le scalaire $data->{'site_id'} à la fin du tableau @bad. Par contre tu peux m'expliquer ce que tu tentes de faire dans la deuxième ligne ? Tu devrais aller voir les liens suivants : Les tables de hashage : http://sylvain.lhullier.org/publications/i...chapitre07.html Et surtout les références : http://sylvain.lhullier.org/publications/i...chapitre11.html Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 5 novembre 2006 Partager Posté(e) le 5 novembre 2006 PLease, on précise le langage dans le titre du post, comme indiqué dans les règles de la section. Sinon, comment voulez-vous qu'on vous aide ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
pierrickg Posté(e) le 9 novembre 2006 Auteur Partager Posté(e) le 9 novembre 2006 merci pour les liens qui expliquent beaucoup mieux que les tutos que j'avais trouvés avant et merci pour les infos et le script, je testerai tout ça dès que possible Lien vers le commentaire Partager sur d’autres sites More sharing options...
pierrickg Posté(e) le 11 novembre 2006 Auteur Partager Posté(e) le 11 novembre 2006 j'ai répondu qu'à moitié dans la deuxième ligne je veux ajouter le tableau [$data->{'lien_nom'}, $data->{'url'}] à l'occurence $data->{'site_id'} du tableau $tab_bad de manière à obtenir le tableau : %tab_bad[site_id] = [lien_nom, url] voilà Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 11 novembre 2006 Partager Posté(e) le 11 novembre 2006 Dans ce cas, il faut passer par les références. cf mon deuxième lien. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pierrickg Posté(e) le 11 novembre 2006 Auteur Partager Posté(e) le 11 novembre 2006 Il y a un truc qui ne marche pas dans le code de theocrite, ou je l'ai mal utilisé. Je fais : my $site_list = {}; while ($data = $sth->fetchrow_hashref()) { $nb_liens++; # test url $etat = &check_url($data->{'url'}); if ($etat eq "ok"){ $nb_ok++; } else { my $h = {}; #on index chaque url par nom $h->{$data->{'lien_nom'}} = $data->{'url'}; #on index par site (Faire une cle non numerique c'est mieux) $site_list->{$data->{'site_id'}} = $h; $nb_bad_liens++; } } $nb_bad_sites = scalar(keys %$site_list); my $list_l; for my $id (keys %{$site_list}) { #en perl 6 plus de foreach # liste des liens $list_l = ''; for my $name (keys %{$site_list->{$id}}){ $list_l .= "'$name' - " . $site_list->{$id}->{$name} . "\n"; } print $list_l; ###!!! ET LA JE N'AI QU'UN ENREGISTREMENT MEME QUAND IL Y A PLUSIEURS LIENS FAUX } En effet le résultat de la requête est : $nb_bad_liens = 37 $nb_bad_sites = 17 mais je n'ai qu'un lien dans $list_l par site. Où sont les 20 autres liens ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 12 novembre 2006 Partager Posté(e) le 12 novembre 2006 Quel code de theocrite ? my $h = {}; pourquoi aps my %h = {}; ? Pareil pour site_list. Je ne comprends pas bien. Tu les utilise indifféremment en scalaires et en hashtable. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pierrickg Posté(e) le 13 novembre 2006 Auteur Partager Posté(e) le 13 novembre 2006 OK, désolé en fait c'est un bout de code retravaillé qu'on m'a donné depuis, mais ce n'était pas de théocrite qui ne ferait certainement pas des erreurs de débutant comme cela ! je l'ai utilisé en toute confiance mais fallait pas. Je ne comprends pas bien. Tu les utilise indifféremment en scalaires et en hashtable. ... moi non plus donc avec des %, ça marche sauf que pour chaque site, $list_l contient tous les liens de tous les sites, pas le site en question. Au niveau du for my $name (keys %{$site_list->{$id}}){ $list_l .= "'$name' - " . $site_list->{$id}->{$name} . "\n"; } ça doit planter Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.