Fonction recherche d'une région a partir d'un code postal

Soyez le premier à donner votre avis sur cette source.

Snippet vu 20 212 fois - Téléchargée 29 fois

Contenu du snippet

Pour ma première source, voici un petit script tout bête, qui permet a partir d'une code postal de renvoyer la région française au quel il appartiens

Source / Exemple :


<?

// recherche de la region en fonction d'un code postal v2

function region($cp)
{
$cp = substr($cp, 0, -3);
	
    if(!is_numeric($cp)){
       return false;
    }

    $regions = array(
                '75' => 'Ile-de-France',
                '77' => 'Ile-de-France',
                '78' => 'Ile-de-France',
                '91' => 'Ile-de-France',
                '92' => 'Ile-de-France',
                '93' => 'Ile-de-France',
                '94' => 'Ile-de-France',
                '95' => 'Ile-de-France',
		'51' => 'Champagne-Ardenne',  
		'08' => 'Champagne-Ardenne',  
		'10' => 'Champagne-Ardenne',
		'52' => 'Champagne-Ardenne',
		'80' => 'Picardie',
		'02' => 'Picardie',
		'60' => 'Picardie',
		'76' => 'Haute-Normandie',
		'27' => 'Haute-Normandie',
		'45' => 'Centre',
                '18' => 'Centre',
                '28' => 'Centre',
                '36' => 'Centre',
                '37' => 'Centre',
                '41' => 'Centre',
		'14' => 'Basse-Normandie',
                '50' => 'Basse-Normandie',
                '61' => 'Basse-Normandie',  
		'21' => 'Bourgogne',  
		'58' => 'Bourgogne',
		'71' => 'Bourgogne',
		'89' => 'Bourgogne',
		'59' => 'Nord-Pas-de-Calais',
		'62' => 'Nord-Pas-de-Calais',
		'57' => 'Lorraine',
		'54' => 'Lorraine',
		'55' => 'Lorraine',
                '88' => 'Lorraine',  
		'67' => 'Alsace',
                '68' => 'Alsace',
		'25' => 'Franche-Comté',
                '39' => 'Franche-Comté',
                '70' => 'Franche-Comté',
                '90' => 'Franche-Comté',  
		'44' => 'Pays-de-la-Loire',  
		'49' => 'Pays-de-la-Loire',  
		'53' => 'Pays-de-la-Loire',
		'72' => 'Pays-de-la-Loire',
		'85' => 'Pays-de-la-Loire',	
		'35' => 'Bretagne',
		'22' => 'Bretagne',
		'29' => 'Bretagne',
		'56' => 'Bretagne',
		'86' => 'Poitou-Charentes',
                '16' => 'Poitou-Charentes',
                '17' => 'Poitou-Charentes',
                '79' => 'Poitou-Charentes',
		'33' => 'Aquitaine',
                '24' => 'Aquitaine',
                '40' => 'Aquitaine',
                '47' => 'Aquitaine',
                '64' => 'Aquitaine',  
		'31' => 'Midi-Pyrénées',  
		'09' => 'Midi-Pyrénées',
		'12' => 'Midi-Pyrénées',
		'32' => 'Midi-Pyrénées',
		'46' => 'Midi-Pyrénées',
		'65' => 'Midi-Pyrénées',
	        '81' => 'Midi-Pyrénées',
		'82' => 'Midi-Pyrénées',
		'87' => 'Limousin',
                '19' => 'Limousin',
                '23' => 'Limousin',  
		'69' => 'Rhône-Alpes',
                '01' => 'Rhône-Alpes',
                '07' => 'Rhône-Alpes',
                '26' => 'Rhône-Alpes',
                '38' => 'Rhône-Alpes',
                '42' => 'Rhône-Alpes',  
		'73' => 'Rhône-Alpes',  
		'74' => 'Rhône-Alpes',
		'63' => 'Auvergne',
		'03' => 'Auvergne',
		'15' => 'Auvergne',
		'43' => 'Auvergne',
		'34' => 'Languedoc-Roussillon',
		'11' => 'Languedoc-Roussillon',
		'30' => 'Languedoc-Roussillon',
                '48' => 'Languedoc-Roussillon',
                '66' => 'Languedoc-Roussillon', 
		'13' => 'Provence-Alpes-Côte-d Azur',
                '04' => 'Provence-Alpes-Côte-d Azur',
                '05' => 'Provence-Alpes-Côte-d Azur',
                '06' => 'Provence-Alpes-Côte-d Azur',
                '83' => 'Provence-Alpes-Côte-d Azur',
                '84' => 'Provence-Alpes-Côte-d Azur',    
		'20' => 'Corse');
  
   if(isset($regions[$cp])){
      return $regions[$cp];
   } else {
      return false;
   }
}
?>

Conclusion :


merci @ malalam, kankrelune, coucou747 , dume et Arto_8000 p pour leurs remarques et aide

A voir également

Ajouter un commentaire

Commentaires

malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

bon, je vais laisser ce source parce que je me doute qu'il sera utile aux plus grands débutants...Mais s'il te plait, change le!
Le code est vraiment moche...
les multiples retour, l'absence de vérifications sur le paramètre passé, les if () inutiles, les guillemets pour entourer les variables de type chaîne, la balise <?...etc
Je te donne un indice (un gros) :
<?php
function getRegion ($cp) {
if (false === is_numeric ($cp) || 2 > strlen ((string)$cp)) {
return false;
}
$dpt = substr ($cp, 0, 2);
$aReg array (0> 'Provence-Alpes-Côte d\'Azur',
1 => 'Picardie'
);
$aDpts array ('13'> array (0 => 'Bouches-du-Rhône', ),
'04' => array (0 => 'Alpes-de-haute-Provence'),
'80' => array (1 => 'Somme')
);
return $aRetour array ('dept'> $aDpts[$dpt][key ($aDpts[$dpt])], 'reg' => $aReg[key ($aDpts[$dpt])]);
}

print_r (getRegion ('13100'));
?>
lefter
Messages postés
63
Date d'inscription
lundi 7 juin 2004
Statut
Membre
Dernière intervention
16 mai 2009
-
Serai plus simple et plus rapide de faire une base de donnée, et d'y faire une recherche par une requête!
(Ton exemple est valable si ton fournisseur d'accès ne met pas à disposition une base de donnée MySql ou autre, sinon je ne vois pas l'intéret)
cs_Arnauti
Messages postés
418
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009
-
Ba je ne suis pas sur qu'une requete SQL, soit plus lente. Ce n'est qu'une idee, je n'ai pas essayer.

A++
kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
euuh pourquoi ne pas passer par un tableau ?

function region($cp)
{
if(!is_numeric($cp)){
return false;
}

$regions = array(
'75' => 'Ile-de-France',
'77' => 'Ile-de-France',
'78' => 'Ile-de-France',
'91' => 'Ile-de-France',
'92' => 'Ile-de-France',
'93' => 'Ile-de-France',
'94' => 'Ile-de-France',
'95' => 'Ile-de-France',
la suite... .. .
);
if(isset($regions[$cp])){
return $regions[$cp];
} else {
return false;
}
}

ou même un switch...

function region($cp)
{
if(!is_numeric($cp)){
return false;
}

switch($cp){

case 75:
case 77:
case 78:
case 91:
case 92:
case 93:
case 94:
case 95:
return 'Ile-de-France';
break;

la suite... .. .

default:
return false;
break;
}
}

lefter utiliser MySQL ne sera pas plus simple et surement pas plus rapide... de plus je ne vois pas l'interet de créer une table et de générer des requetes juste pour retrouver une région c'est totalement inutile... .. .

@ tchaOo°
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29 -
salut

tableau ou switch, seraient de bien meilleurs solution, moi je choisirais le tableau car il serait moins répétitif que le switch, plus générique, et qu'on pourrait se servir du tazbleau pour rentrer ces données dans une base de donnée...

mais cette source là est très mal codée... seul la liste des dépatrements est interessante...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.