Comment supprimer le premier caractère de chaîne en PHP?


Réponses:


330

Pour supprimer tout :depuis le début d'une chaîne, vous pouvez utiliser ltrim :

$str = '::f:o:';
$str = ltrim($str, ':');
var_dump($str); //=> 'f:o:'

109
Notez que lrtim supprimera tout :::::. Parfois, ce n'est pas un comportement souhaité.
CoR

5
notez que cela n'est destiné qu'aux caractères uniques. ltrim supprimera tous les caractères de la chaîne fournie: ltrim('prefixprefix_postfix', 'prefix')résultats dans'_postfix';
Cody Django

556

La substr()fonction vous aidera probablement ici:

 $str = substr($str, 1);

Les chaînes sont indexées à partir de 0, et ce deuxième paramètre de fonction prend le cutstart. Faites donc ce 1, et le premier caractère est parti.


35
Soyez conscient de l'unicode. Si vous avez affaire à une chaîne arbitraire (par exemple "Ål <- danois pour l'anguille"), vous devez utiliser mb_substr et spécifier l'encodage.
Thomas Jensen

ce n'est pas une implémentation correcte, cela ne fonctionne pas avec la chaîne de caractères unique "a". si vous essayez une chaîne de caractères unique, substr retourne une valeur booléenne
anru

2
@anru Le manuel indique que si la longueur de la chaîne est égale au paramètre de démarrage, une chaîne vide sera retournée. Avant la version 7, falseétait retourné. Vous devez donc vérifier s'ils sont égaux si ce n'est pas le comportement que vous souhaitez.
rybo111

95

Utilisez substr :

$str = substr($str, 1); // this is a applepie :)

Excellente réponse! Merci d'avoir partagé! Je ne suis pas sûr de bien comprendre le commentaire de votre code sur Applepie. oO
HoldOffHunger

64

Temps d'exécution pour les 3 réponses:

Retirez la première lettre en remplaçant le cas

$str = "hello";
$str[0] = "";
// $str[0] = false;
// $str[0] = null;
// replaced by �, but ok for echo

Temps d'exécution pour 1.000.000 tests: 0.39602184295654sec


Supprimer la première lettre avec substr ()

$str = "hello";
$str = substr($str, 1);

Temps d'exécution pour 1.000.000 tests: 5.153294801712sec


Supprimer la première lettre avec ltrim ()

$str = "hello";
$str= ltrim ($str,'h');

Temps d'exécution pour 1.000.000 tests: 5.2393000125885sec


Supprimez la première lettre avec preg_replace ()

$str = "hello";
$str = preg_replace('/^./', '', $str);

Temps d'exécution pour 1.000.000 tests: 6.8543920516968sec


Merci. Voir ma mise à jour, cependant. Cela m'a causé un problème lors de l'utilisation de la chaîne mise à jour dans une requête SQL.
rybo111

6
J'ai juste essayé la $str[0] = '';solution et ça n'a pas marché. bien, cependant, si vous prévoyez d'utiliser la variable par exemple pour comparer >ou <cela ne fonctionnera pas. Il compte toujours `` comme + '' par exemple $str = 'hello'; $str[0] = ''; var_dump($str); // string(5) 'ello'
Ian

@Ian: Je suis tombé sur le même problème lors de la récupération des enregistrements d'une API à l'aide d'un mot-clé, var_dump($keyword)j'ai essayé qui montrait la longueur du caractère précédent .. puis j'ai essayé de couper le mot-clé et cela a bien fonctionné var_dump(trim($keyword)).. J'espère que cela aide quelqu'un .. :)
Syed Qarib

3
Cela ne fonctionne pas. La position "supprimé" est remplacée par un octet nul, vous obtenez donc "\ 0hello" au lieu de "hello".
Josef Kufner

1
J'obtiens "Avertissement: impossible d'attribuer une chaîne vide à un décalage de chaîne" pour $ str [0] = "";
Francisco Luz

25

Voici le code

$str = substr($str, 1); 

echo $str;

Production:

this is a applepie :)

11

Pour supprimer le premier caractère de chaîne en PHP,

$string = "abcdef";     
$new_string = substr($string, 1);

echo $new_string;
Generates: "bcdef"

9
$str = substr($str, 1);

Voir l' exemple 3 du manuel PHP

echo substr('abcdef', 1);     // bcdef

Remarque:

unset($str[0]) 

ne fonctionnera pas car vous ne pouvez pas supprimer une partie d'une chaîne: -

Fatal error: Cannot unset string offsets

9

Mettre à jour

Après d'autres tests, je ne recommande plus de l'utiliser. Cela m'a causé un problème lors de l'utilisation de la chaîne mise à jour dans une requête MySQL et de la modification substrdu problème. J'ai pensé à supprimer cette réponse, mais les commentaires suggèrent qu'elle est plus rapide pour que quelqu'un puisse l'utiliser. Vous pouvez trouver que rogner la chaîne mise à jour résout les problèmes de longueur de chaîne.


Parfois, vous n'avez pas besoin d'une fonction:

$str[0] = '';

Par exemple:

$str = 'AHello';
$str[0] = '';
echo $str; // 'Hello'

Cette méthode modifie la chaîne existante plutôt que d'en créer une autre.


Cela semble aussi être plus rapide.
Emanuil Rusev

@EmanuilRusev comment cela? Juste curieux si vous voulez dire qu'il est plus rapide à taper ou qu'il fonctionne plus rapidement.
rybo111

Je veux dire qu'il s'exécute plus rapidement.
Emanuil Rusev

@EmanuilRusev Je serais intéressé si vous pouviez fournir des statistiques que j'ajouterai à la réponse.
rybo111

1
Je dois être prudent avec ça. Le code ci-dessous renvoie bool (false). $ foo = 'livre'; $ bar = 'livre'; $ bar = substr ($ bar, 1); $ foo [0] = ''; var_dump ($ foo === $ bar);
iftrepo

8

La réponse acceptée:

$str = ltrim($str, ':');

fonctionne mais en supprimera plusieurs :lorsqu'il y en a plusieurs au début.

$str = substr($str, 1);

supprimera tout caractère dès le début.

cependant,

if ($str[0] === ':')
    $str = substr($str, 1);

fonctionne parfaitement.


6

vous pouvez utiliser la fonction sbstr ()

$amount = 1;   //where $amount the the amount of string you want to delete starting  from index 0
$str = substr($str, $amount);

2

Supprime les occurrences de chaque mot dans un tableau depuis le début et la fin d'une chaîne + un espace et éventuellement des caractères uniques supplémentaires comme par le trim normal ()

<?php
function trim_words($what, $words, $char_list = '') {
    if(!is_array($words)) return false;
    $char_list .= " \t\n\r\0\x0B"; // default trim chars
    $pattern = "(".implode("|", array_map('preg_quote', $words)).")\b";
    $str = trim(preg_replace('~'.$pattern.'$~i', '', preg_replace('~^'.$pattern.'~i', '', trim($what, $char_list))), $char_list);
    return $str;
}

// for example:
$trim_list = array('AND', 'OR');

$what = ' OR x = 1 AND b = 2 AND ';
print_r(trim_words($what, $trim_list)); // => "x = 1 AND b = 2"

$what = ' ORDER BY x DESC, b ASC, ';
print_r(trim_words($what, $trim_list, ',')); // => "ORDER BY x DESC, b ASC"
?>

1

Le code fonctionne bien pour moi.

$str = substr($str ,-(strlen($str)-1));

Peut-être aussi contribuer avec des réponses.


1
celui-ci ne fonctionne pas avec une chaîne de caractères unique: comme "a"
anru

Vous avez raison =) Donc, croyez qu'une solution possible serait de tester avant qu'il ne contienne qu'un seul caractère. Par exemple: $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): $ str; Ou $ str = strlen ($ str)> 1? substr ($ str, - (strlen ($ str) -1)): ''; parce que l'idée est de supprimer le dernier caractère, si vous n'en avez qu'un ...: P
Claudionor Oliveira

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.