Réponses:
$str = ltrim($str, '0');
(string)((int)"00000234892839")
(int) "00009384783473"(nombre aléatoire) et mon résultat était 2147483647. Si je le lance comme un flotteur cependant, il semble fonctionner correctement. Strange
Je ne sais pas pourquoi les gens utilisent des méthodes si complexes pour réaliser une chose aussi simple! Et regex? Hou la la!
Voilà, le moyen le plus simple et le plus simple (comme expliqué ici: https://nabtron.com/kiss-code/ ):
$a = '000000000000001';
$a += 0;
echo $a; // will output 1
Similaire à une autre suggestion, mais n'effacera pas le zéro réel:
if (ltrim($str, '0') != '') {
$str = ltrim($str, '0');
} else {
$str = '0';
}
Ou comme cela a été suggéré (à partir de PHP 5.3), l'opérateur ternaire abrégé peut être utilisé:
$str = ltrim($str, '0') ?: '0';
$str = ltrim($str, '0') ?: '0'; - pas d'appel trim redondant.
vous pouvez ajouter "+" dans votre variable,
exemple :
$numString = "0000001123000";
echo +$numString;
Regex était déjà proposé, mais pas correctement:
<?php
$number = '00000004523423400023402340240';
$withoutLeadingZeroes = preg_replace('/^0+/', '', $number)
echo $withoutLeadingZeroes;
?>
la sortie est alors:
4523423400023402340240
Contexte sur Regex: les ^signaux début de chaîne et le +signe signale plus ou aucun des signes précédents. Par conséquent, l'expression régulière ^0+correspond à tous les zéros au début d'une chaîne.
preg_replace() expects at least 3 parameters, 2 given
Je ne pense pas que preg_replace soit la réponse ... vieux fil, mais il se trouve que je cherche cela aujourd'hui. Le casting ltrim et (int) est le gagnant.
<?php
$numString = "0000001123000";
$actualInt = "1123000";
$fixed_str1 = preg_replace('/000+/','',$numString);
$fixed_str2 = ltrim($numString, '0');
$fixed_str3 = (int)$numString;
echo $numString . " Original";
echo "<br>";
echo $fixed_str1 . " Fix1";
echo "<br>";
echo $fixed_str2 . " Fix2";
echo "<br>";
echo $fixed_str3 . " Fix3";
echo "<br>";
echo $actualInt . " Actual integer in string";
//output
0000001123000 Origina
1123 Fix1
1123000 Fix2
1123000 Fix3
1123000 Actual integer in tring
Im fixe de cette façon.
c'est très simple. seulement passer une chaîne son supprimer zéro début de chaîne.
function removeZeroString($str='')
{
while(trim(substr($str,0,1)) === '0')
{
$str = ltrim($str,'0');
}
return $str;
}
Ajay Kumar propose l' écho le plus simple + $ numString; J'utilise ceux-ci:
echo round($val = "0005");
echo $val = 0005;
//both output 5
echo round($val = 00000648370000075845);
echo round($val = "00000648370000075845");
//output 648370000075845, no need to care about the other zeroes in the number
//like with regex or comparative functions. Works w/wo single/double quotes
En fait, toute fonction mathématique prendra le nombre de la "chaîne" et le traitera comme tel. C'est beaucoup plus simple que n'importe quelle regex ou fonction comparative. J'ai vu ça sur php.net, je ne me souviens pas où.
En supposant que vous souhaitiez supprimer un run-on de trois zéros ou plus et que votre exemple soit une chaîne:
$test_str ="0002030050400000234892839000239074";
$fixed_str = preg_replace('/000+/','',$test_str);
Vous pouvez faire en sorte que le modèle regex corresponde à ce dont vous avez besoin si mes hypothèses sont fausses.
Cette aide?
<br>balises séparant les nombres; font-ils réellement partie de votre chaîne?