Formater une adresse Ip

Aurélien Le Cointre
Invité n'ayant pas de compte PHPfrance

07 nov. 2006, 19:31

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 nov. 2006, 19:50

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.

Aurélien Le Cointre
Invité n'ayant pas de compte PHPfrance

08 nov. 2006, 10:26

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

08 nov. 2006, 11:26

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 ;
;)

ViPHP
ViPHP | 1380 Messages

08 nov. 2006, 11:40

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);
}
ripat

Aurélien Le Cointre
Invité n'ayant pas de compte PHPfrance

08 nov. 2006, 11:40

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

08 nov. 2006, 11:46

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: