S'agit-il de trois chaînes distinctes ou d'une chaîne avec des retours à la ligne séparant chaque nombre? J'ai remarqué lors de l'édition de votre question que vous aviez des <br>balises séparant les nombres; font-ils réellement partie de votre chaîne?
Avertissement $ str: = '0'. Adressé dans ma réponse, sur la base de cette réponse.
Mike Weir
pourquoi trop compliquer les choses? et mike c'est $ str + = 0; comme expliqué ici: nabtron.com/kiss-code
Nabeel Khan
@NabeelKhan Cela ne répondrait pas à la question, qui ne demande pas de convertir la chaîne en entier. Voir les commentaires sur la réponse de Svisstack pour savoir pourquoi ce n'est pas une si bonne solution.
Lonesomeday
@lonesomeday vous devriez lire attentivement sa question où il mentionne: "notez que le nombre ci-dessus a été généré au hasard." donc ce sont déjà des nombres entiers :)
J'ai juste essayé un (int) "00009384783473"(nombre aléatoire) et mon résultat était 2147483647. Si je le lance comme un flotteur cependant, il semble fonctionner correctement. Strange
JamesHalsall
manuel dit que "La taille d'un entier dépend de la plate-forme, bien qu'une valeur maximale d'environ deux milliards soit la valeur habituelle (soit 32 bits signés)"
llamerr
1
Pas étrange. Les entiers en php vont jusqu'à 2 ^ 31, soit 2147483647. Pour des nombres plus grands, vous devrez utiliser la solution basée sur les chaînes de lonesomeday.
awm
1
Casting to float peut sembler fonctionner, mais à un moment donné, vous obtiendrez des erreurs d'arrondi.
awm
1
Que diriez-vous de l'idée d'évaluer chacune des chaînes en utilisant une instruction de boucle, que quand il arrive à un chiffre (ou une chaîne) non nul, il obtiendra l'index de ce chiffre et supprimera tous les zéros précédents puis fera écho à la chaîne qui commence avec la première valeur non nulle ..
Gerald
10
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!
Cela semble être une solution plus simple, mais elle ne gère aucune taille de chaîne comme le font les autres réponses. Vous convertissez d'une chaîne en entier, puis de nouveau en tant que chaîne - plus simple pour simplement raccourcir la chaîne.
Mike Weir
1
Intéressant, mais je ne sais pas si c'est la meilleure solution avec les conversions de type.
jonathanbell
1
S'il vous plaît ne faites pas cela ... c'est pourquoi PHP obtient une mauvaise réputation
Dan F.
9
Similaire à une autre suggestion, mais n'effacera pas le zéro réel:
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
TarangP
2
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.
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ù.
<br>
balises séparant les nombres; font-ils réellement partie de votre chaîne?Réponses:
ltrim
:la source
la source
(int) "00009384783473"
(nombre aléatoire) et mon résultat était 2147483647. Si je le lance comme un flotteur cependant, il semble fonctionner correctement. StrangeJe 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/ ):
la source
Similaire à une autre suggestion, mais n'effacera pas le zéro réel:
Ou comme cela a été suggéré (à partir de PHP 5.3), l'opérateur ternaire abrégé peut être utilisé:
la source
$str = ltrim($str, '0') ?: '0';
- pas d'appel trim redondant.vous pouvez ajouter "+" dans votre variable,
exemple :
la source
Regex était déjà proposé, mais pas correctement:
la sortie est alors:
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.la source
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.
la source
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.
la source
Ajay Kumar propose l' écho le plus simple + $ numString; J'utilise ceux-ci:
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ù.
la source
En supposant que vous souhaitiez supprimer un run-on de trois zéros ou plus et que votre exemple soit une chaîne:
Vous pouvez faire en sorte que le modèle regex corresponde à ce dont vous avez besoin si mes hypothèses sont fausses.
Cette aide?
la source