› Fiche technique de getDept('N')


  • Description
  • Mises à jour
  • Statistiques

Nom : getDept('N')Langage : PHPDate : 03/11/2007Auteur : OwInTwIsT

Description
Petite fonction simple, mais monotone à faire, qui permet de connaître le nom d'un département français à partir de son numéros (et l'inverse : son numéros à partir de son département) ainsi que le nombre total de départements.

Morceau de code pas vraiment compliqué, mais utile quand on n'a pas envie de s'embêter à taper toute la liste...

Issue du tableau $ListeDepts (précédemment posté et que cette source remplace), les valeurs sont extraites d'une seule commande.


Revue (dighan)
Fonction de récupération d'un indice/nom de départements français.

Atouts

+ Listing des départements
+ Protoype identique pour des contextes différents (nom-indice-nombre departements)

Défauts

- Les clés ne sont pas toujours numériques (2B, 2A)
- Optimisation possible
- Vérification stricte à faire sur des fonctions comme array_search

Notes

Originalité : 8/10

Aspect : 7/10

Facilité d'installation : 10/10

Compatibilité : 10/10

Note globale : 8.75/10Note des utilisateurs : 5 Téléchargements : 99Commentaires : 20

06/11/2007 @ 09:03 #20
AnGes-
Membre
Avatar de AnGes-
Commentaire : 0
oui, c'est l'opérateur ternaire, qui existe dans beaucoup de langage

06/11/2007 @ 01:12 #19
OwInTwIsT
Membre
Avatar de OwInTwIsT
Commentaire : 0
Tiens, je connaissait pas ca... je suppose que le fonctionnement est le même que $iif(<bool>,<true>,<false>) en mIRC..?

05/11/2007 @ 21:17 #18
dighan
Membre
Avatar de dighan
Commentaire : 0
Pour en revenir au snippet, il est possible de faire encore plus court :

Langage : PHP
 
if (!$U) return count($ListeDepts);
else return $ListeDepts[$U];
devient :
return ($u === '0') ? count($ListeDepts) : $ListeDepts[$u];
 



05/11/2007 @ 19:51 #17
AnGes-
Membre
Avatar de AnGes-
Commentaire : 0
http://fr.php.net/manual/fr/types.comparisons.php suffit de se documenter, enfin de toute manière ça ne changerait rien quant à l'opérateur not, comparaison stricte ou pas, tu ne vérifies pas la même chose quand tu compares et quand tu appliques cet opérateur

05/11/2007 @ 19:33 #16
thoas
Membre
Avatar de thoas
Commentaire : 0
dighan a écrit :


Juste une chose: L'opérateur "!" est utilisable que sur des booléens. L'utiliser sur d'autres types est souvent source de bugs.
$var == 0 ou $var == '0' n'équivaut donc pas à !$var.
Seul $var == FALSE <=> !$var.



Ca ne pose aucun problème dans ce cas de figure, je suis d'accord que si on avait comparé avec === on aurait sans doute eu un problème de conversion (pas testé, à voir?).

Je vais être chieur, mais pas besoin du elseif, un simple if suffit.
C'était mon quart d'heure chieur.

see u

05/11/2007 @ 16:00 #15
OwInTwIsT
Membre
Avatar de OwInTwIsT
Commentaire : 0
Comme quoi, quand on pas codé depuis quelques temps, y a des trucs qui devenir secondaire... même sur un petit snippet comme ca...

05/11/2007 @ 14:22 #14
AnGes-
Membre
Avatar de AnGes-
Commentaire : 0

05/11/2007 @ 14:03 #13
dighan
Membre
Avatar de dighan
Commentaire : 0
Le fait que ça marche ne veut pas dire que c'est correct. Dans tous les cas, ces restrictions de codage sont reprises dans d'autres langages beaucoup moins permissifs : le C (par exemple).
Maintenant, libre à vous de les appliquer/ou pas.

05/11/2007 @ 10:16 #12
AnGes-
Membre
Avatar de AnGes-
Commentaire : 0
ou alors plus simple, tu définis $U à false par défaut, et plus besoin de donner un argument pour obtenir le nombre totale.

Langage : PHP
 
<?php
function getDept($U=false) {
$ListeDepts = array (
'1' => 'Ain',
'2' => 'Aisne',
'3' => 'Allier',
'4' => 'Alpes de Hautes Provences',
'5' => 'Hautes Alpes',
'6' => 'Alpes Maritimes',
'7' => 'Ardèche',
'8' => 'Ardennes',
'9' => 'Ariège',
'10' => 'Aube',
'11' => 'Aude',
'12' => 'Aveyron',
'13' => 'Bouches du Rhônes',
'14' => 'Calvados',
'15' => 'Cantal',
'16' => 'Charente',
'17' => 'Charente-Maritime',
'18' => 'Cher',
'19' => 'Corrèze',
'2A' => 'Haute Corse',
'2B' => 'Corse du Sud',
'21' => 'Côte d'Or',
'
22' => 'Côtes d'Armor',
'23' => 'Creuse',
'24' => 'Dordogne',
'25' => 'Doubs',
'26' => 'Drôme',
'27' => 'Eure',
'28' => 'Eure & Loir',
'29' => 'Finistère',
'30' => 'Gard',
'31' => 'Haute Garonne',
'32' => 'Gers',
'33' => 'Gironde',
'34' => 'Hérault',
'35' => 'Ille & Vilaine',
'36' => 'Indre',
'37' => 'Indre & Loire',
'38' => 'Isère',
'39' => 'Jura',
'40' => 'Landes',
'41' => 'Loir & Cher',
'42' => 'Loire',
'43' => 'Haute Loire',
'44' => 'Loire Atlantique',
'45' => 'Loiret',
'46' => 'Lot',
'47' => 'Lot & Garonne',
'48' => 'Lozère',
'49' => 'Maine & Loire',
'50' => 'Manche',
'51' => 'Marne',
'52' => 'Haute Marne',
'53' => 'Mayenne',
'54' => 'Meurthe & Moselle',
'55' => 'Meuse',
'56' => 'Morbihan',
'57' => 'Moselle',
'58' => 'Nièvre',
'59' => 'Nord',
'60' => 'Oise',
'61' => 'Orne',
'62' => 'Pas-de-Calais',
'63' => 'Puy-de-Dôme',
'64' => 'Pyrénées Atlantiques',
'65' => 'Hautes Pyrénées',
'66' => 'Pyrénées Orientales',
'67' => 'Bas Rhin',
'68' => 'Haut Rhin',
'69' => 'Rhône',
'70' => 'Haute Saône',
'71' => 'Saone & Loire',
'72' => 'Sarthe',
'73' => 'Savoie',
'74' => 'Haute Savoie',
'75' => 'Ville de Paris',
'76' => 'Seine Maritime',
'77' => 'Seine & Marne',
'78' => 'Yveline',
'79' => 'Deux Sèvres',
'80' => 'Somme',
'81' => 'Tarn',
'82' => 'Tarn & Garonne',
'83' => 'Var',
'84' => 'Vaucluse',
'85' => 'Vendée',
'86' => 'Vienne',
'87' => 'Haute Vienne',
'88' => 'Vosges',
'89' => 'Yonne',
'90' => 'Territoire de Belfort',
'91' => 'Essonne',
'92' => 'Hauts-de-Seine',
'93' => 'Seine St Denis',
'94' => 'Val de Marne',
'95' => 'Val d'Oise',
 
// Départements d'
Outre-Mer
'971' => 'Guadeloupe',
'972' => 'Martinique',
'973' => 'Guyane',
'974' => 'Réunion',
 
// Territoires d'Outre-Mer
'975' => 'Saint-Pierre-et-Miquelon',
'976' => 'Mayotte',
'977' => 'Saint-Barthélémy',
'978' => 'Saint-Martin',
'986' => 'Wallis-et-Futuna',
'987' => 'Polynésie française',
'988' => 'Nouvelle-Calédonie'
 
);
 
if (!$U) return count($ListeDepts);
elseif (is_numeric($U) OR $U == '2A' OR $U == '2B') return $ListeDepts[$U];
 
return array_search($U,$ListeDepts);
}
 


comme ceci :P

edit: y'a un soucis au niveau de l'affichage dit donc oO

05/11/2007 @ 02:43 #11
OwInTwIsT
Membre
Avatar de OwInTwIsT
Commentaire : 0
C'est bon à savoir, mais, dans la logique de conception ici, c'est bien un '0' que je tiens à avoir...

04/11/2007 @ 23:56 #10
AnGes-
Membre
Avatar de AnGes-
Commentaire : 0
c'est que tu n'as pas testé cher ami ^^
moi même je me suis dis la même chose mais ça fonctionne
pour le '0' j'aurais pas cru mais pour le 0, si.. toute valeur différente de 0 est considéré comme true et 0 false :)

04/11/2007 @ 22:04 #9
dighan
Membre
Avatar de dighan
Commentaire : 0
Juste une chose: L'opérateur "!" est utilisable que sur des booléens. L'utiliser sur d'autres types est souvent source de bugs.
$var == 0 ou $var == '0' n'équivaut donc pas à !$var.
Seul $var == FALSE <=> !$var.

04/11/2007 @ 16:39 #8
OwInTwIsT
Membre
Avatar de OwInTwIsT
Commentaire : 0
thoas a écrit :

J'admet que ça aurait impliqué de changer constamment le nombre de département à la main en cas d'ajout, mais ça évite de creer un array inutilement.

Justement, je voulais éviter de devoir modifier "à la main" le nombre total de départements... C'est vrai qu'on perd un peu de temps, mais bon...

04/11/2007 @ 15:29 #7
thoas
Membre
Avatar de thoas
Commentaire : 0
Hoy,

Comme l'a dit AnGe- les else ne servent pas vu que tu quittes la fonction en retournant un resultat.
De mon point de vue, je n'aurais pas commencé la fonction en créant directement l'array. Ainsi, si c'était "0" qui était demandé j'aurais retourné directement le nombre de département.
J'admet que ça aurait impliqué de changer constamment le nombre de département à la main en cas d'ajout, mais ça évite de creer un array inutilement.

Détails inutile : $U == "0" se simplifie en !$U vu que tu peux tester également le int au lieu du char dans cet exemple.

Bonne source pour ceux qui ne veulent pas se casser la tête (j'en fait parti)

04/11/2007 @ 14:49 #6
AnGes-
Membre
Avatar de AnGes-
Commentaire : 0
la fonction est en double dans ta source, l'exemple pour le Calvados ne fonctionnera pas en donnant Cavaldos. Tu as la possibilité de virer les else, quoi d'autre.. ? j'ai rien de bien particulier à dire, que des petites choses.

04/11/2007 @ 13:10 #5
OwInTwIsT
Membre
Avatar de OwInTwIsT
Commentaire : 0
Ca bug encore pour les screenshot aussi ! :D

03/11/2007 @ 23:27 #4
Nazario
Administrateur
Avatar de Nazario
Commentaire : 0
Maintenant on peut dire que la source est presque parfaite :)

(J'ai corrigé le bug pour mettre à jour les fichiers, donc tu peux corriger now)

03/11/2007 @ 21:00 #3
OwInTwIsT
Membre
Avatar de OwInTwIsT
Commentaire : 0
Ah oki... Je me suis toujours demandé quel était la différence... -_-'

03/11/2007 @ 20:38 #2
dighan
Membre
Avatar de dighan
Commentaire : 0
Au niveau de l'optimisation, je parle essentiellement des guillemets. Les guillemets sont plus gourmands que les apostrophes puisqu'ils interprètent les variables et les caractères d'espacement (rn, r, ...).

03/11/2007 @ 20:26 #1
OwInTwIsT
Membre
Avatar de OwInTwIsT
Commentaire : 0
Ah zut ! J'suis une plaie... J'avais pas vue pour 2A et 2B ! Merci dighan pour m'avoir pointé du doigt ce défaut... Tant pi, j'updaterai quand l'édition de fiches marchera ! :D
Quand tu parle d'optimiser... Tu pense à quoi ?