2012-12-28 13 views
6

Czy istnieje prosty sposób użycia ltrim(), aby usunąć pojedyncze wystąpienie meczu zamiast wszystkich dopasowań?Używanie wbudowanego w PHP ltrim() w celu usunięcia pojedynczego znaku

mam zapętlenie poprzez tablicę łańcuchów i chciałbym, aby usunąć, a dopiero pierwszy mecz (samogłoski w tym przypadku):

ltrim($value, "aeiouyAEIOUY"); 

Z domyślne zachowanie ciąg aardvark lub Aardvark będzie być przycięte, aby być "rdvark". Chciałbym, aby wynik był "ardvark".

Nie jestem zobowiązany do ltrim w jakikolwiek sposób, ale wydawało się najbliższą wbudowaną funkcją PHP. Byłoby miło ltrim i rtrim miał opcjonalny parametr „limit”, tylko mówię ... :)

+1

aaeezz powinno być wynikiem aezz lub aeezz? – Lepidosteus

Odpowiedz

4

Wystarczy użyć preg zastąpić ma opcję limitu

np

$value = preg_replace('/^[aeiouy]/i', '', $value, 1); 
+0

To jest rzeczywiście lepsze niż '{1}' myślę. Mniej do parsowania. Czy w drugim parametrze może być podwójne cudzysłowy? – Geo

+0

ah dzięki, redagowałem –

1

nie można używać ltrim to zrobić ze względów mówisz, nie można użyć str_replace (który również nie ma limitu). Myślę, że najłatwiej po prostu użyć wyrażenia regularnego:

$value = preg_replace('/^[aeiouy]/i', '', $value); 

Jednak jeśli naprawdę nie chcesz tego zrobić, można użyć podciąg, ale trzeba by sprawdzić pozycję którejkolwiek z tych ciągów w string w pętli, ponieważ nie ma funkcji php, która wykonuje taką kontrolę, o której wiem.

+0

Dzięki, nie mam ograniczeń dotyczących usuwania pierwszej postaci. Jestem po prostu nowy w PHP i nie znam jeszcze wszystkich funkcji. preg_replace działa świetnie. – ptay

1

Można użyć funkcji preg_replace:

<?php 
    $value = preg_replace('/^[aeiouy]/i', '', $value); 
?> 
+0

'{1}' jest zbędny. – delnan

+0

@delnan Dzięki za heads up. Usunąłem to. –

4

Wyrażenia regularne to chyba przesada, ale:

$value = preg_replace('/^[aeiouy]/i', '', $value); 

Zanotuj i sprawia, że ​​wielkość liter.

+0

Idealny! Dziękuję Ci. – ptay

1

Istnieje kilka sposób można przejść o robienie tego, czego szukasz zrobić.

Być może najprostszym byłoby zastąpienie wyrażenia regularnego tak:

$pattern = '/^[aeiouy]{1}/i'; 
$result = preg_replace($pattern, '', $original_string); 
+0

To działa również dobrze, dziękuję! – ptay

1

Jest to prawdopodobnie najbardziej efektywny sposób (tak ignorować moje wyrażenia regularne odpowiedzieć):

if (strpos('aeiouyAEIOUY', $value[0]) !== false) $value = substr($value, 1); 

Albo

if (stripos('aeiouy', $value[0]) !== false) $value = substr($value, 1); 
+0

Podoba mi się wersja regex lepiej. –

+0

+1. Podejrzewam, że ten byłby szybszy niż RegEx. Benchmark, ktoś? – Geo

+0

@Geo wersja regex jest ciągle o około 20% wolniejsza, ale 1 milion operacji dla obu zajmuje tylko około sekundy, więc jest mało prawdopodobne, aby w tym przypadku była to korzyść. –

Powiązane problemy