11
votes

Chaîne de coupe PHP à un caractère particulier

Y a-t-il une fonction de chaîne php pour couper une chaîne après un caractère particulier. J'avais un coup d'œil sur le site php.net et j'ai fait une recherche de Google mais n'a rien trouvé. La seule solution que je puisse penser était exploser puis attrape la première partie de la matrice, mais ce n'est pas la solution la plus élégante.

Par exemple P>

$string = "/gallery/image?a=b";
$string = imaginary_function($string,'?');
echo $string; //echoes "/gallery/image"


1 commentaires

Vous pourriez trouver S ($ str ) -> AvantFirst ('?') ou s ($ str) -> beforelast ('?') utile, comme trouvé dans Cette bibliothèque autonome .


7 Réponses :


24
votes

Peut-être quelque chose comme ceci: xxx

Notez que ce n'est pas très robuste (c.-à-d. Pas de vérification des erreurs, etc.), mais cela pourrait vous aider à résoudre votre problème. < / p>


6 commentaires

Drôle, je viens de trouver la même solution, il semble y avoir de nombreuses façons différentes d'aborder ce problème simple


Pas surprenant que PHP soit dérivé lâchement dérivé de Perl;) en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it


Mais cela échouera si "?" On ne se trouve pas dans la chaîne, c'est-à-dire qu'il aboutira à une chaîne vide.


Pas sûr, mais je devine deux appels de fonction ( substr et Stros ) prenez plus de ressources qu'un seul appel comme strtstr ou strutok . Bien sûr, si c'est juste exécuté une fois par page charge, qui se soucie :)


Peut essayer uk3.php.net/manual/fr/function.strrpos.php < / a> répétitivement à la place?


@nikc: Ouais, je vous avais prévenu que ce n'était pas très robuste;) @dcneiner: Très vrai ... Je n'ai pas réalisé que le troisième argument avait été ajouté à strtstr . C'est probablement un meilleur moyen d'y aller si vous avez 5,3 ou plus sur votre serveur.



21
votes

1 commentaires

Utile, parce que maintenant, j'ai la piqûre de requête dans une variable afin que je puisse l'utiliser plus tard si j'en ai besoin. Je suis tout sur le minimisation de mon code.



2
votes
function imaginary_function($string, $char) {
  $index = strpos($char, $needle);
  if ($index === false) { return $string };

  return substr($string, 0, $index);
}
An excellent, official list of string manipulation functions is available here.

0 commentaires

5
votes

Le strstr code> et Stristr code> Les fonctions trouvent la première occurrence dans une chaîne et renvoie tout après elle (y compris la chaîne de recherche). Mais vous fournissez true code> comme troisième argument, il ramène tout devant la chaîne de recherche.

if( $path = strstr( $string, '?', true) ){
   # Do something
}


3 commentaires

Soyez prudent avec stristr : "Retourne la sous-chaîne correspondante. Si l'aiguille n'est pas trouvée, renvoie false ".


Vous n'avez pas besoin stristr . strtstr suffira.


Merci@dominic et @gumbo. Mise à jour de ma réponse pour refléter vos deux commentaires.



10
votes

try strutok : xxx

note que le deuxième paramètre est une liste de séparateurs et non une chaîne de séparateur.


0 commentaires

0
votes

Cela peut être surchargé pour ce que vous essayez de faire, mais si vous voulez séparer une URL en morceaux, essayez la fonction PHP parse_url . Voici le


0 commentaires

2
votes

Bien que des fonctions de chaîne pure puissent donner une meilleure performance, ce n'est pas simplement une chaîne; C'est une URI. Par conséquent, il est plus logique d'utiliser une fonction faite pour gérer ces données: xxx


0 commentaires