Page 1 sur 1

Formater une adresse Ip

Posté : 07 nov. 2006, 19:31
par Aurélien Le Cointre
Bonjour,

Je voudrais formater une adresse Ip avant de l'insérer dans une table.

Au prélable, je voudrais
1) supprimer les points,
2) ajouter des O (zéro).

Par exemple, mon adresse locale est 127.0.0.1.

Je voudrais l'insérer sous la forme 127000000001.

Dois-je passer par les décourageantes expressions régulières ? :cry:

Ou par un, plus simple mais moins rapide, "explode" ?

Merci de votre aide !

Bien à vous,

Aurélien

Posté : 07 nov. 2006, 19:50
par albat
Le plus élégant sera sans doute d'utiliser les expressions régulières,
mais si tu y es allergique, un explode() pourra faire l'affaire.

Posté : 08 nov. 2006, 10:26
par Aurélien Le Cointre
Bonjour,

Après l'indication d'Albat, j'ai essayé de travailler à partir d'une expression régulière.

J'ai obtenu ce code :
$ip = '127.0.0.1';
preg_match_all('#(\d{1,3})(?:.)(\d{1,3})(?:.)(\d{1,3})(?:.)(\d{1,3})#', $ip, $sortie, PREG_SET_ORDER);
if (strlen($sortie[0][1]) == 1)
$sortie[0][1] = '00'.$sortie[0][1];
if (strlen($sortie[0][1]) == 2)
$sortie[0][1] = '0'.$sortie[0][1];
if (strlen($sortie[0][2]) == 1)
$sortie[0][2] = '00'.$sortie[0][2];
if (strlen($sortie[0][2]) == 2)
$sortie[0][2] = '0'.$sortie[0][2];
if (strlen($sortie[0][3]) == 1)
$sortie[0][3] = '00'.$sortie[0][3];
if (strlen($sortie[0][3]) == 2)
$sortie[0][3] = '0'.$sortie[0][3];
if (strlen($sortie[0][4]) == 1)
$sortie[0][4] = '00'.$sortie[0][4];
if (strlen($sortie[0][4]) == 2)
$sortie[0][4] = '0'.$sortie[0][4];
print $sortie[0][1].$sortie[0][2].$sortie[0][3].$sortie[0][4];
Le résultat me donne satisfaction, mais ne pourrais-je améliorer le code à partir de cette base ?

Merci de votre aide.

Cordialement,

Aurélien

Posté : 08 nov. 2006, 11:26
par albat
Même sans regexp, je pense qu'il y avait beaucoup plus simple :
$ip        = "127.0.0.1";
$ip_finale = "";

$ip_tab = explode(".", $ip);
foreach ($ip_tab as $value) 
        { while (strlen($value)<3)
                { $value = "0".$value ;
                }
          $ip_finale .= $value;
        }
echo $ip_finale ;
;)

Posté : 08 nov. 2006, 11:40
par Ripat
Ou, dans la même idée:
$ip_tab = explode(".", $ip);
foreach ($ip_tab as $value){  
  $ip_finale .= str_pad($value, 3, '0', STR_PAD_LEFT);
}

Posté : 08 nov. 2006, 11:40
par Aurélien Le Cointre
Merci, Albat.

J'éprouve quelques difficultés à conceptualiser les boucles !

Tu peux mettre "résolu" si tu en as le pouvoir, car je ne suis pas inscrit.

Bonne journée,

Aurélien

Posté : 08 nov. 2006, 11:46
par albat
Ou, dans la même idée:
$ip_tab = explode(".", $ip);
foreach ($ip_tab as $value){  
  $ip_finale .= str_pad($value, 3, '0', STR_PAD_LEFT);
}
str_pad() !!!
C'est la fonction que je voulais, mais je ne retrouvais pas son nom !
@$¤%# d'Alzheimer...
Tu peux mettre "résolu" si tu en as le pouvoir, car je ne suis pas inscrit.
J'ai le pouvoir de mettre "Résolu",
mais toi seul as le pouvoir de t'enregistrer sur le forum. ;)
Ce qui, en plus, te donnera aussitôt, le pouvoir de mettre "Résolu"... :pouce: