45 votes

Comment extraire la sous-chaîne par index de début et index de fin ?

$str = 'HelloWorld';
$sub = substr($str, 3, 5);
echo $sub; // prints "loWor"

Je sais que substr() prend le premier paramètre, le 2ème paramètre est l'index de début, tandis que le 3ème paramètre est la longueur de la sous-chaîne à extraire. Ce dont j'ai besoin, c'est d'extraire la sous-chaîne par startIndex et endIndex . Ce dont j'ai besoin, c'est quelque chose comme ça :

 $str = 'HelloWorld';
$sub = my_substr_function($str, 3, 5);
echo $sub; // prints "lo"

Existe-t-il une fonction qui fait cela en php ? Ou pouvez-vous m'aider avec une solution de contournement, s'il vous plaît?

80voto

KingCrunch Points 45168

C'est juste des maths

 $sub = substr($str, 3, 5 - 3);

La longueur est la fin moins le début.

16voto

Andreas Points 1582
function my_substr_function($str, $start, $end)
{
  return substr($str, $start, $end - $start);
}

Si vous avez besoin de le sécuriser sur plusieurs octets (c'est-à-dire pour les caractères chinois, ...) utilisez la fonction mb_substr :

 function my_substr_function($str, $start, $end)
{
  return mb_substr($str, $start, $end - $start);
}

8voto

Dan Grossman Points 31514

Il suffit de soustraire l'index de début de l'index de fin et vous obtenez la longueur souhaitée par la fonction.

 $start_index = 3;
$end_index = 5;
$sub = substr($str, $start_index, $end_index - $start_index);

5voto

Tim Points 1759

Vous pouvez simplement utiliser une valeur négative sur le troisième paramètre :

 echo substr('HelloWorld', 3, -5);
// will print "lo"

Si la longueur est donnée et est négative, alors ce nombre de caractères sera omis de la fin de la chaîne (après que la position de début a été calculée lorsqu'un début est négatif).

Comme indiqué dans la documentation substr .

1voto

Pas exactement...

Si nous avons un index de départ égal à 0 et que nous voulons SEULEMENT le premier caractère, cela devient difficile car cela ne produira pas ce que vous voulez. Donc, si votre code nécessite un $end_index :

 // We want just the first char only.
$start_index = 0;
$end_index = 0;
echo $str[$end_index - $start_index]; // One way... or...
if($end_index == 0) ++$end_index;
$sub = substr($str, $start_index, $end_index - $start_index);
echo $sub; // The other way.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X