To remove leading/trailing zeroes (example: "0123.4560"), doing a += 0 is easier than trim tricks.
ltrim
(PHP 4, PHP 5)
ltrim — Supprime les espaces (ou d'autres caractères) de début de chaîne
Description
$str
[, string $charlist
] )Supprime les espaces (ou d'autres caractères) de début de chaîne.
Liste de paramètres
-
str -
La chaîne d'entrée.
-
charlist -
Il est aussi possible de spécifier les caractères à supprimer en utilisant le paramètre
charlist. Listez simplement les caractères que vous voulez supprimer dans ce paramètre. Avec .., vous pourrez spécifier des intervalles de caractères.
Valeurs de retour
Cette fonction retourne la chaîne str, après
avoir supprimé les caractères invisibles de début de chaîne.
Si le second paramètre charlist a été omis,
ltrim() supprimera les caractères suivants :
- " " (ASCII 32 (0x20)), un espace ordinaire.
- "\t" (ASCII 9 (0x09)), une tabulation.
- "\n" (ASCII 10 (0x0A)), une nouvelle ligne (line feed).
- "\r" (ASCII 13 (0x0D)), un retour chariot (carriage return).
- "\0" (ASCII 0 (0x00)), le caractère NUL.
- "\x0B" (ASCII 11 (0x0B)), une tabulation verticale.
Historique
| Version | Description |
|---|---|
| 4.1.0 |
Ajout du paramètre charlist.
|
Exemples
Exemple #1 Exemple avec ltrim()
<?php
$text = "\t\tThese are a few words :) ... ";
$binary = "\x09Example string\x0A";
$hello = "Hello World";
var_dump($text, $binary, $hello);
print "\n";
$trimmed = ltrim($text);
var_dump($trimmed);
$trimmed = ltrim($text, " \t.");
var_dump($trimmed);
$trimmed = ltrim($hello, "Hdle");
var_dump($trimmed);
// Supprime les caractères de contrôle ASCII du début de $binary
// (de 0 à 31, inclusif)
$clean = ltrim($binary, "\x00..\x1F");
var_dump($clean);
?>
L'exemple ci-dessus va afficher :
string(32) " These are a few words :) ... " string(16) " Example string " string(11) "Hello World" string(30) "These are a few words :) ... " string(30) "These are a few words :) ... " string(7) "o World" string(15) "Example string "
Guys, if += 0 is producing wrong values sometimes, and preg_replace is cpu consuming, then just stick to the main function described on that page, and use:
<?php
$value = ltrim($value, '0');
?>
should be the fastest and most reliable.
I think all those comments can be misleading for begginers checking this page - it's sort of using magic tricks to reinvent the wheel.
Keep in mind the amount of resources preg_replace() uses.
I would suggest a simple if statement if you need to parse through large amounts of data.
<?php
function remove_leading_zeros_from_number($number_string) {
$limit = 9000.1
$temp = $number
(float) $temp;
if ($number < $limit) {
$number += 0;
} else {
preg_replace('~^[0]*([1-9][0-9]*)$~','$1',$number_string)
}
}
?>
Code is untested, but probably sound.
For those who use right-to-left languages such as Arabic, Hebrew, etc., it's worth mentioning that ltrim() (which stands for left trim) & rtrim() (which stands for right trim) DO NOT work contextually. The nomenclature is rather semantically incorrect. So in an RTL script, ltrim() will trim text from the right direction (i.e. beginning of RTL strings), and rtrim() will trim text from the left direction (i.e. end of RTL strings).
The neat trick from Mr. Sherwood has only one ugly side-effect: If the "number" contained in the string is considerably large, you will end up with an int (or float) value that has nothing to do with the original number ...
You may use preg_replace instead:
$number_string = preg_replace('~^[0]*([1-9][0-9]*)$~','$1',$number_string);
This kills any leading zeros safely without changing any other data.
Hope this helps.
Function similar to ltrim only it will remove everything from the start of the string to the last occurence of anything in the $charlist
<?php
function lstrip($string, $charlist) {
// removes everything from start of string to last occurence of char in charlist
$charlist = str_split($charlist);
foreach ($charlist as $char) {
$pos = max(strrpos($string, $char), $pos);
}
$string_stripped = substr($string, $pos + 1);
return $string_stripped;
}
?>
