November 3, 200619 yr 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...
November 4, 200619 yr heu, c'est du php+mysql, ça... ça irait plutôt dans l'autre sous-section, non ? pour le deplacement
November 4, 200619 yr 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
November 5, 200619 yr 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 ?
November 9, 200619 yr Author 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
November 11, 200619 yr Author 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à
November 11, 200619 yr Author 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 ?
November 12, 200619 yr 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.
November 13, 200619 yr Author 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
Archived
This topic is now archived and is closed to further replies.