2017-07-03 2 views
0

Ich möchte eine TSV-Zeichenfolge teilen. Die Struktur lautet:preg_split: einschließlich leeres Feld

abc\tdef\tghi\tjklm 

wo \ t ist ein Tab-Zeichen.

Wenn ich preg_split verwenden solche String aufgeteilt $ i

$field=preg_split("/\t/", $i); 

$ Feld [3] ist jklm.

Wenn ich jedoch eine andere Zeichenfolge haben

abc\tdef\t\t 

$ Feld [3] ist kein gültiger Index.

Wie kann ich leere Felder in $ -Feld erzwingen, so dass alle $ -Feldarrays eine gleiche Anzahl von Indizes haben?

+3

Dies sollte das normale Verhalten sein. Ihr Beispiel gibt mir ein Array zurück mit 4 Elementen, wobei 2 und 3 leere Strings sind. Laut doc http://php.net/manual/de/function.preg-split.php gibt es eine Flagge namens PREG_SPLIT_NO_EMPTY, die nicht gesetzt werden darf, wenn Sie leere Elemente zurück haben wollen. – user1915746

+1

Warum sogar Preg Split verwenden? Es ist kein Regex-Problem. '\ T' ist statisch. Warum also Regex? – Andreas

Antwort

0

Wenn Ihr Problem nur zum Extrahieren Tab Separator Wert Daten können Sie in PHP-Funktion gebaut werden, benutzen (fgetcsv()). Es ist stabiler als unsere eigene Funktion. Bitte versuchen Sie dies

if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    // extract csv using tab delimiter 
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) { 
     print_r($data); 
    } 
    fclose($handle); 
}