Php : conversion de variables

Résolu
juanou Messages postés 137 Date d'inscription   Statut Membre Dernière intervention   -  
juanou Messages postés 137 Date d'inscription   Statut Membre Dernière intervention   -
Salut.

Je suis à la recherche d'un moyen permettant de convertir un variable de type chaine dans le type qui sera le mieux adapté. (Je travaille en php)

Exemples :

'blabla' => string
'1.57' => float
' 1.57 ' => float
'8' => integer
' 8 ' => integer
'true' => boolean

Si ça ne marche pas avec les tableaux je n'en ferai pas une maladie. :)
Mais j'aimerais surtout que ça distingue les nombres des chaines.
A voir également:

3 réponses

Apatik Messages postés 5304 Date d'inscription   Statut Contributeur Dernière intervention   782
 
Bonjour. Tu es nouveau sous php je suppose =)
Les types de variables ne sont pas nommés en php. Mais tu as des fonctions qui te permettent de vérifier le type de tes variables "isstring" par exemple (ou "is_string", ou encore "isstr" ou "is_str", ça fait quelques temps..).
Je te conseille de faire un tour sur php.fr, tu trouvera la liste des fonctions, et leur utilisation.
0
juanou Messages postés 137 Date d'inscription   Statut Membre Dernière intervention   58
 
Merci Atapik.

Non, je ne suis plus vraiment nouveau sur php... :(

Mais je ne le prends pas mal, parce que je ne suis pas sûr que tu aies bien compris ce que je recherchais.
(Je n'ai pas du m'exprimer assez clairement)

is_string(' 1.57 ') me retournera true. (tu remarqueras les espaces autour du chiffre)
Or j'aimerais plutôt que mafonction(' 1.57 ') me retourne 1.57

Tu vois la nuance ?
0
juanou Messages postés 137 Date d'inscription   Statut Membre Dernière intervention   58
 
Ca y est. Je crois que j'ai trouvé une combine.
Il y aura sûrement moyen de faire un code plus propre. Mais j'ai le résultat que je recherchais. C'est l'essentiel.

function bestType($var)
	{
	$var = trim($var) ;

	if ( $var === 'true' || $var === '1' ) $var = true ; // booleenne true
	elseif ( $var === 'false' || $var === '' ) $var = false ; // booleenne false
	else
		{ // entière
		$tmp = $var ;
		settype($tmp,'int') ;
		settype($tmp,'string') ;
		if ( $var === $tmp ) $var = $tmp ;
		else
			{ // décimale
			$tmp = $var ;
			settype($tmp,'float') ;
			settype($tmp,'string') ;
			if ( $var === $tmp ) $var = $tmp ;
			}
		}
		
	return $var ;
	}
0