2017-08-16 4 views
0

J'utilise explode en PHP, car j'ai besoin de séparer une chaîne. Je dois séparer les nombres parce que je fais une opération mathématique dessus. Le code que j'ai fonctionne bien quand ils sont entiers. Si j'ai une chaîne de ce type 10 x 2.5 il ne prend pas en compte la partie décimale qui serait le , 5. Comment puis-je faire pour prendre en compte cette partie aussi?Chaîne séparée avec explode php

$data = '10 x 2,5'; 
$array = explode("x", $data); 
$total = $array[0]*$array[1]; 
+0

Seuls les champs avec ',' – max

+0

Potentiellement utile car il s'agit d'une page/réponse liée: https://stackoverflow.com/a/44987003/2943403 – mickmackusa

Répondre

1

Essayez avec ceci. Remplacez simplement "," par "." et ça marche.

$data = '10 x 2,5'; 
$data = str_replace(',','.','10 x 2,5'); 
$array = explode("x", $data); 
echo $total = $array[0]*$array[1]; 
+0

Cette réponse est très correcte dans le cas où il y avait une décimale séparée par ',' ou par un '.' Merci – max

+0

Cela fonctionnerait également dans le cas de la décimale est dans la première position? Par exemple: '7,5 x 10' ou les deux '7,5 x 7,5' – max

2

Voici deux approches que vous pouvez prendre. Si vous pouvez changer le séparateur virgule pour une période/arrêt complet:

$data = '10 x 2.5'; 
$floats = array_map('floatval', explode(' x ', $data)); 
echo $floats[0] * $floats[1]; 

Démo: https://3v4l.org/hFMEt

ou vous pouvez utiliser une expression régulière qui vous affermira aussi avoir le format de données droit.

echo preg_replace_callback('/(\d+(?:[.,]\d+)?)\h*x\h*(\d+(?:[.,]\d+)?)/', function($match) { 
    return str_replace(',' , '.', $match[1]) * str_replace(',' , '.', $match[2]); 
    }, $data); 

PHP Demo: https://3v4l.org/I82Gt
Regex Démo: https://regex101.com/r/tTcJSp/1/

0

essayez ceci:

<?php 
$data = '10 x 2,5'; 
$array = explode("x", $data); 
$total = floatval(str_replace(',', '.', $array[0]))*floatval(str_replace(',', '.', $array[1])); 
?> 

ici str_replace() est utilisé pour vérifier s'il y a , dans la chaîne, puis convertir en son valeur flottante. J'espère que cela aide.

+0

L'utilisation de 'str_replace' sur' $ data' permettrait d'économiser quelques appels, vous pouvez ensuite mapper le 'floatval' sur le' $ array'. (https://3v4l.org/nj1hi) – chris85

+0

@ chris85 c'est vrai. Je l'ai gardé séparé étant donné qu'il pourrait y avoir une raison pour laquelle il y a ',' dans les données $ et l'explosion avec 'x' est la première chose requise. Je vous remercie. –

0
$data = '10 x 2,5'; 
$array = explode("x", $data); 

$decimal =$array[1]; 

//replace the comma with dot 
$decimal_formated = str_replace(',', '.', $decimal); 
//format the string to float 
$decimal_formated = (float)$decimal_formated; 
//OR $decimal_formated = floatval($decimal_formated); 

//get total 
$total = $array[0]*$decimal_formated; 

//french format $total, with comma 
$total_with_comma =number_format($total, 1, ',', ' '); 


echo $decimal.'</br>'; //output 2,5 
echo $decimal_formated.'</br>'; //output 2.5 
echo $total.'</br>'; //output 25 
echo $total_with_comma.'</br>'; // output 25,0 

Vous pouvez utiliser number_format(), floatval().