2016-06-24 5 views
1

Ich möchte den Teil von diesem Text entfernen. ACCES_ALL_AREAS_1. Jetzt ist der Text so und ich möchte es wie ACCES_ALL_AREAS machen. Ich habe PHP explodieren mit for-Schleifen. Das hat nicht funktioniert. Und auch die Wortzahl ist nicht statisch. Nicht immer 3 wie oben.Split Strings in PHP und kombinieren sie wieder ohne letztes Element (explodieren)

  • A_PLACE_IN_THE_ABC_3 ->A_PLACE_IN_THE_ABC
  • ACCES_ALL_AREAS_1 ->ACCES_ALL_AREAS
+0

Wird es immer eine Nummer nach dem letzten Unterstrich geben? –

+0

@ObjectManipulator, yeah sure ... Immer gibt es eine Nummer am Ende –

+0

Hast du aufgegeben oder was ??? – AbraCadaver

Antwort

4

Ich würde dies wahrscheinlich tun:

$string = preg_replace('/_\d+$/', '', $string); 
  • ersetzen _ und Ziffern am Ende $ Schnur

Für Spaß können Sie auch dies tun:

$string = rtrim($string, '_1234567890'); 

Oder mit einer Reichweite:

$string = rtrim($string, '_0..9'); 

Ein anderer Weg:

$parts = explode('_', $string); 
array_pop($parts); 
$string = implode('_', $parts); 
  • auf _ auf ein Array explode
  • das letzte Element Pop-off des Arrays
  • implodieren Array auf _ zurück in einen String
+0

Nur um [** eine Demo auf regex101.com **] (https://regex101.com/r/vM5uR7/1) mit deinem Ausdruck anzuzeigen. – Jan

-1

Try this:

$mystring = "A_PLACE_IN_THE_ABC_3"; 
$pos = strrpos($mystring, "_"); 
$result = substr($mystring,0, $pos); // A_PLACE_IN_THE_ABC 
0

Mal sehen, ob Sie eine Reihe von nicht haben, wird es entfernen gibt die letzte Reihe auch immer es ist, es zu versuchen:

<?php 
$string = "A_PLACE_IN_THE_ABC_3"; 
$ex = explode('_', $string); // break array 
$c = count($ex); // total array 
$rm = $c - 1; // 1 place to 0 
unset ($ex[$rm]); // Remove unwanted array 
$new = join('_', $ex); // regenerate string 
echo "New String: ". $new; 

eine weitere Option ist substr:

$string = "A_PLACE_IN_THE_ABC_3"; 
echo substr($string, 0, -2); // remove last 2 strings