J'ai une ficelle et j'aimerais tout obtenir après une certaine valeur. La chaîne commence toujours par un ensemble de chiffres, puis un trait de soulignement. Je voudrais obtenir le reste de la chaîne après le trait de soulignement. Donc, par exemple, si j'ai les chaînes suivantes et ce que j'aimerais que je retourne:
"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"
Comment puis-je faire quelque chose comme ça?
Le strpos()
trouve le décalage du trait de soulignement, puis substr extrait tout de cet index plus 1.
$data = "123_String";
$whatIWant = substr($data, strpos($data, "_") + 1);
echo $whatIWant;
Si vous souhaitez également vérifier si le caractère de soulignement (_
) existe dans votre chaîne avant d'essayer de l'obtenir, vous pouvez utiliser les éléments suivants:
if (($pos = strpos($data, "_")) !== FALSE) {
$whatIWant = substr($data, $pos+1);
}
strtok
est une fonction négligée pour ce genre de chose. C'est censé être assez rapide.
$s = 233718_This_is_a_string;
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' );
Une chaîne vide comme celle-ci force le retour du reste de la chaîne.
NB: s'il n'y avait rien après le '_', vous obtiendrez une valeur FALSE
pour $allTheRest
qui, comme indiqué dans documentation , doit être testée avec ===, afin de la distinguer des autres valeurs Falsey.
Voici la méthode en utilisant explode
:
$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string
ou:
$text = @end((explode('_', '233718_This_is_a_string', 2)));
En spécifiant 2
pour le paramètre limit
dans explode()
, il retourne un tableau avec 2 éléments maximum séparés par le délimiteur de chaîne. Le retour du 2e élément ([1]
) donnera le reste de la chaîne.
Voici un autre one-liner en utilisant strpos
(comme suggéré par @flu ):
$needle = '233718_This_is_a_string';
$text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string
si quelqu'un a besoin d'extraire la première partie de la chaîne, alors il peut essayer,
Requête:
$s = "This_is_a_string_233718";
$text = $s."_".substr($s, 0, strrpos($s, "_"));
Sortie:
This_is_a_string