Bonsoir,
Je suis un peut perdu, j'ai besoin de votre aide please :)
J'ai une variable $prix = "3 348.79";
Celle ci dois être multiplié par
$quantite = 3;
$prix = "3 348.79";
$quantite = 3;
$prix_total = ($prix*$quantite); // résultat 9
Jusqu'à là sa va, mais j'ai le hic du espace entre les 3 "3 348.79".
Php ignore tout ce qui est après l'espace.
Comment faire pour qu'il ignore juste l'espace?
J'ai essayé de faire un str_replace(' ','',$prix);
Mais sa ne marche pas.
Résumé :
Comment multiplier un INT avec un STRING avec un espace ?
Merci d'avance.
Merci beaucoup de votre aide, même si j'ai trouvé un solution un peut barbare :
$strlen = strlen($prix);
$prix2 = '';
for ($index1 = 0; $index1 < $strlen; $index1++) {
if($prix$index1] == '0' OR $prix$index1] == '1' OR $prix$index1] == '2' OR $prix$index1] == '3'
OR $prix$index1] == '4' OR $prix$index1] == '5' OR $prix$index1] == '6' OR $prix$index1] == '7' OR $prix$index1] == '8' OR $prix$index1] == '9' OR $prix$index1] == '.'):
$prix2 .= $prix$index1];
endif;
}
echo $prix2; //3348.79
Voilà,
Merci !
J'ai trouvé le bug ! 3 mois après mais OUI ! lol.
Il existe deux codes ISO pour la touche espace. L'espace " ", et un autre qui est " ".
A cause de ça mon appli buggait !!! #WTF
Bonsoir,
$prix=str_replace(' ','',$prix);
Il faut lui donner 3 paramètres et normalement ça marche.
J'ai testé ça chez moi.
<?php
$p = '3 333.33';
$m = 3;
$p=str_replace(' ','',$p);
echo $p;
echo '<br>';
echo $p * $m;
//Résultat :
//3333.33
//9999.99
?>
Donc ton problème n'est pas un problème d'espace.
Au passage les parenthèses ne servent à rien.
Le seul moyen d'obtenir le résultat que tu a, est de passer un caractère invisible comme (alt + 0160) dans le premier paramètre de la fonction str_replace
Je récupère ma variable prix à partir de json :
{"prix":"3\u00a0348.79","quantite":3,"poids":"22"}
Je fais json_decode($json, TRUE);
Puis je fais
$prix = $json'prix'];
$prix=str_replace(' ','',$prix);
$quantite = $json'quantite'];
$prix_total = $prix*$quantite; // Résultat 9 même avec un str_replace
J'ai trouvé ton problème.
Ta page est en ISO et tu récupères des données en utf8.
la solution est d'appliquer utf8_decode sur ton prix
$prix = utf8_decode($json'prix']);
Mon code de test.
<?php
$j = '{"prix":"3\u00a0348.79","quantite":3,"poids":"22"}';
$j = json_decode($j, TRUE);
$p = $j'prix'];
$m = $j'quantite'];
echo $p;
echo '<br>';
$p = utf8_decode($p);
echo $p;
echo '<br>';
$p=str_replace(" ","",$p);
echo $p;
echo '<br>';
echo $p * $m;
$prix_total = $p*$m;
echo '<br>';
echo $prix_total;
?>
Ma page est en utf8.
Content-Type: text/html; charset=UTF-8
echo $prix; //3 348.79
echo $prix2 = str_replace(' ', '', utf8_decode($prix)); //3 348.79
netbeans.... Je vais voir si je le re-enregistre
Regarde, si je fais
$prix2 = explode(' ', $prix); //3 348.79
print_r( $prix2); // Array ( [0] => 3 348.79 )
Mais si je fais
$prix2 = explode(' ', "3 348.79"); //3 348.79
print_r( $prix2); // Array ( [0] => 3 [1] => 348.79 )
ça marche
Oui trop ! Je me casse la tête là ^^
PS: regarde mon post d'avant "Regarde, si je fais ..."
Merci beaucoup de m'aider à cette heure-ci !
mais si tu fais echo $prix; il te donne bien 3 348.79 et pas un truc dans le genre 3Â 348.79
PS : regarde bien le code source de la page généré et pas le résulta affiché par le navigateur.
Si j'enleve
header('Content-Type: text/html; charset=UTF-8');
il m'affiche 3Â...
Si non non :
3 348.79<br/>Array
(
[0] => 3 348.79
)
Peux-tu nous envoyer ton code source ? Ou c'est trop galère à reproduire ?
Car la pour le coup je vois pas non plus, j'ai besoin d'avoir les fichiers sous les yeux.
Normalement le floatval est implicite il me semble ?
C'est vrai que j'ai vraiment l'impression que c'est un problème d'encodage/décodage, il doit y avoir un caractère foireux qui s'incruste dans la string.
Bonjour,
Voilà le code json que je récupère directement par Mysql (en UTF-8 general_ci):
{
"Id-modele": "159",
"reference1": "Frida avec pouf",
"codeunique": "",
"finition": "Patch Suzani",
"Reference": "Frida avec pouf",
"Notes": "",
"dim_plaque_largeur": "68",
"dim_plaque_hauteur": "98",
"épaisseur": "88",
"poids_kg_m2": "22",
"unite_de_vente": "piece",
"disponibilité": "0",
"delais_de_livraison_si_disponible_en_jours": "5 à 10",
"delais_de_livraison_si_indisponible_en_jours": "60 à 90",
"pdf_catalogue_produit": "",
"pdf_fiche_technique": "",
"pdf_manuel_dinstallation": "",
"prix_achat": "1 260,00",
"prix_revient": "1 323,00",
"Prix_public_HT_par_m2": "2 799,99",
"Prix_public_TTC_par_m2": "3 348,79",
"Prix_pro_HT_par_m2": "2 002,00",
"Prix_revente_HT_par_m2": "1 540,00",
"marge_brute_max": "2,1163982684",
"marge_brute_moyenne": "1,5132247619",
"marge_brute_min": "1,1640190476"
}
]
function str_espace($str) {
$str = str_replace(' ', '', $str);
$return str_replace(',', '.', $str);
}
$prix = str_espace($finition'Prix_public_TTC_par_m2']); //3 348.79
C'est la colonne Prix_public_TTC_par_m2 que je chercher à multiplier ici; par la quantité que je reçois en POST en ajax.
Alors quand j'obtiens le prix, je peut faire un str_replace pour la virgule en point, mais pas avec l'espace.
Merci d'avance tout le monde :)
PS @Grafikart :
echo floatval($prix); //3
Ok !
Et Comme le suggère Grafikart, pourquoi stock tu les chiffres avec un espace c'est pas très conventionnel ! Si c'est pour le côté 'joli', stock AMHA toujours tes données brut et ajoute l'espace à l'affichage ça t'économisera ce genre de prises de têtes.
C'est une importation de excel (qui mets les espaces automatiquement) vers json. Je n'ai pas le choix...
Mais le sujet est résolu :P
Merci pour tout.
I.