35 Stimmen

Mehrere explodierende Zeichen mit Komma und - (Bindestrich)

Ich möchte einen String für alles explode:

  1. Leerzeichen (\n \t usw.)
  2. Komma
  3. Bindestrich (kleiner Strich). So wie dieser >> -

Aber das funktioniert nicht:

$keywords = explode("\n\t\r\a,-", "mein String");

Wie mache ich das?

68voto

shamittomar Punkte 44872

Explode kann das nicht. Es gibt eine schöne Funktion namens preg_split dafür. Mach es so:

$keywords = preg_split("/[\s,-]+/", "Dieses-Zeichen, ist der Grund warum wir keine schönen Dinge haben können");
var_dump($keywords);

Dies gibt aus:

  array
  0 => string 'Dieses' (length=6)
  1 => string 'Zeichen' (length=7)
  2 => string 'ist' (length=3)
  3 => string 'der' (length=3)
  4 => string 'Grund' (length=5)
  5 => string 'warum' (length=5)
  6 => string 'wir' (length=3)
  7 => string 'keine' (length=5)
  8 => string 'schönen' (length=7)
  9 => string 'Dinge' (length=5)

Übrigens, benutze nicht split, es ist veraltet.

13voto

Florian Mertens Punkte 2287

... oder wenn Sie keine Regex mögen und Dinge trotzdem explodieren möchten, könnten Sie mehrere Zeichen durch nur ein Zeichen ersetzen bevor Sie explodieren:

$keywords = explode("-", str_replace(array("\n", "\t", "\r", "\a", ",", "-"), "-", 
  "mein String\nEr enthält Text.\rUnd mehrere\ntypen von Zeilenumbrüchen.\tUnd Tabs."));
var_dump($keywords);

Dies führt zu:

array(6) {
  [0]=>
  string(9) "mein String"
  [1]=>
  string(17) "Er enthält Text."
  [2]=>
  string(11) "Und mehrere"
  [3]=>
  string(12) "typen von Neu"
  [4]=>
  string(6) "zeilen."
  [5]=>
  string(9) "Und Tabs."
}

0 Stimmen

Diese Technik führt 6 Durchläufe über den Eingabestring aus (volle Traversierung des Strings x6), bevor sie am Bindestrich explodiert. Ich würde den viel einfacheren, einzelnen Funktionsaufruf in shamittomars Antwort verwenden, da er nur einen Durchlauf über den Eingabestring macht.

0 Stimmen

Aber alles, was Regex betrifft, ist normalerweise langsamer. Ein tatsächlicher Test wäre erforderlich, um festzustellen, ob es einen signifikanten Unterschied zwischen den beiden Methoden gibt und welche langsamer ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X