2012-12-28 7 views
6

C'è un modo semplice per usare ltrim() per rimuovere una singola istanza di una corrispondenza invece di tutte le corrispondenze?Uso di PHP built-in ltrim() per rimuovere un singolo carattere

Sto scorrendo array di stringhe e mi piacerebbe rimuovere il primo, e solo prima, partita (vocali in questo caso):

ltrim($value, "aeiouyAEIOUY"); 

Con comportamento predefinito la stringa aardvark o Aardvark sarebbe essere tagliato per essere "rdvark". Mi piacerebbe che il risultato fosse "ardvark".

Non sono obbligato a ltrim in alcun modo ma sembrava la funzione PHP incorporata più vicina. Sarebbe bello di ltrim e rtrim avevano un parametro "limite" opzionale, solo dicendo ... :)

+1

aaeezz dovrebbe il risultato essere aezz o aeezz? – Lepidosteus

risposta

4

Basta usare preg sostituirlo ha un'opzione limite

esempio

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

In realtà è meglio di "{1}", penso. Meno da analizzare. Potrebbe essere il downvote per le virgolette nel secondo parametro? – Geo

+0

ah giusto grazie per quello che ho modificato –

1

Non è possibile utilizzare ltrim di fare questo per le ragioni che dici, né è possibile utilizzare str_replace (che ha anche non ha limiti). Penso che sia più facile solo per usare un espressione regolare:

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

Tuttavia, se davvero non si vuole fare questo, è possibile utilizzare una stringa, ma si dovrà verificare la posizione di una di queste stringhe nel stringa in un ciclo poiché non esiste alcuna funzione PHP che faccia un tale controllo di cui sono a conoscenza.

+0

Grazie, non ho restrizioni su come rimuovere il primo carattere. Sono semplicemente nuovo in PHP e non ho ancora familiarità con tutte le funzioni. preg_replace funziona alla grande. – ptay

1

è possibile utilizzare la funzione di preg_replace:

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

'{1}' è ridondante. – delnan

+0

@delnan Grazie per l'avviso. L'ho rimosso. –

4

Le espressioni regolari è probabilmente eccessivo, ma:

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

Annotare il i rende maiuscole e minuscole.

+0

Perfetto! Grazie. – ptay

1

Ci sono diversi modo si può andare a fare quello che stai cercando di fare.

Forse la cosa più semplice sarebbe un sostituto un'espressione regolare in questo modo:

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

Funziona bene anche, grazie! – ptay

1

Questo è probabilmente il modo più efficace (in modo da ignorare le mie espressioni regolari risposta):

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

Oppure,

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

Mi piace di più la versione regex. –

+0

+1. Sospetto che questo sarebbe più veloce di RegEx. Benchmark, chiunque? – Geo

+0

@Geo la versione regex è costantemente più lenta del 20%, ma 1 milione di operazioni per entrambi richiede circa un secondo, quindi in questo caso è improbabile che si verifichi un vantaggio in termini di velocità. –

Problemi correlati