2011-09-19 8 views
5

Se definisco una variabile stringa semplice, come posso contare e generare il numero di vocali nella stringa nel modo più semplice possibile?Un modo semplice per contare le vocali in una stringa in PHP?

Ho cercato e trovato un numero di modi simili per farlo, ma la maggior parte sembra più complessa del necessario. Sono tutti funzionali e forse la complessità è necessaria, ma sto cercando la soluzione più semplice possibile.

mio variabile stringa sarebbe qualcosa di simile:

$someString = "This is some text with some more text and even more text." 

voglio solo per visualizzare i casi totali di a, e, i, o, u. Grazie in anticipo.

+0

Sebbene questo determinato problema non influenzi realmente le prestazioni, è consigliabile cercare prima la complessità minima e quindi cercare di semplificare il più possibile. In realtà dovresti sempre, quando possibile, pensare invece di pensare al processore. –

risposta

8

Ecco una soluzione facile:

<?php 
$string = "This is some text with some more text and even more text."; 
echo "There are <strong>".preg_match_all('/[aeiou]/i',$string,$matches)." vowels</strong> in the string <strong>".$string."</strong>"; 
?> 
3

non testato ma dovrebbe funzionare:

$matches = preg_match_all('/[aeiou]/i', $someString, $ignore); 
+2

Penso che il modello debba essere in una stringa. – icktoofay

+0

@icktoofay sei corretto – evan

0
$someString = "This is some text with some more text and even more text."; 
echo preg_match_all('/[aouie]/i', $someString, $out); 
1
preg_match('#[aeiou]#i', $someString, $matches); 
echo count($matches) - 1, "\n"; 

Qualcosa del genere dovrebbe funzionare. Non riesco a pensare a un metodo più semplice.

8

Perché non solo

$Vowels = substr_count($someString, 'a')+substr_count($someString, 'e')+substr_count($someString, 'i')+substr_count($someString, 'o')+substr_count($someString, 'u'); 

Vorrei, tuttavia, racchiudere in una funzione altrimenti si dovrebbe cambiare i nomi delle variabili ogni volta che si desidera riutilizzarlo:

function CountVowels($String) { 
    return substr_count($String, 'a')+substr_count($String, 'e')+substr_count($String, 'i')+substr_count($String, 'o')+substr_count($String, 'u'); 
} 

echo CountVowels('This is some text with some more text and even more text.'); 
//Echos 17 
+0

Nota: questo potrebbe essere più lento rispetto a iterare effettivamente attraverso (sebbene, poiché è una funzione predefinita, potrebbe essere più veloce) –

+0

Davvero intelligente! ma richiede molte più prestazioni di quanto meriti. –

0

Non adatto per le stringhe nei set di caratteri multibyte.

function countSpecificChars ($string, $charsOfInterest) { 
    $count = 0; 
    $len = strlen($string); 
    for ($i = 0; $i < $len; $i++) { 
     if (in_array($string[$i], $charsOfInterest)) { 
      $count++; 
     } 
    } 
    return $count; 
} 

function countVowels ($string) { 
    return countSpecificChars($string, array('a', 'e', 'i', 'o', 'u')); 
} 

echo countVowels('This is some text with some more text and even more text.'); 
// echoes '17' 
0
$someString = "This is some text with some more text and even more text."; 

$total = 0; 
$vowels = Array('a','e','i','o','u'); 

for ($i=0;$i<strlen($someString);$i++) 
{ 
    for ($j = 0;$j<5;$j++) 
     if ($someString[$i] == $vowels[$j]) 
     { 
      $total++; 
      break; 
     } 
} 
echo $total; 
+0

Penso che tu voglia far sì che continui 2'. – alex

+0

@alex: Oh no! non dovrebbe continuare affatto, ma piuttosto 'break' per terminare l'intero secondo ciclo' for' in una sola volta. –

+0

'break' e' continue 2' dovrebbero fare la stessa cosa, penso. – alex

1

Ecco un altro modo per farlo ...

$vowels = array('a', 'e', 'i', 'o', 'u'); 

$vowelsCounts = array_sum(
       array_intersect_key(
        array_count_values(
        str_split(
        strtolower($str) 
        ) 
       ), 
        array_flip($vowels) 
       ) 
       ); 

CodePad.

Ma, anche questo funziona, assicurati solo di non operare questo sulla stringa originale, in quanto cambierà.

str_replace($vowels, FALSE, $str, $vowelsCounts); 

CodePad.

1

So che è abbastanza tardi, ma ho provato tutte le risposte sopra e le prestazioni non erano buone quando si maneggiava una grande corda.

ritengo questo codice è meglio sulla memoria e tempo di esecuzione

$counter = 0; 
$a = array("a","e","i","o","u"); 
foreach (count_chars($str, 1) as $k => $v) { 
    //echo "There were $v instance(s) of \"" .$k."/". chr($k) . "\" in the string.\n"; 
    if(in_array(strtolower(chr($k)), $a)) 
     $counter += $v; 
} 
0

Conteggio vocale nella stringa utilizzando funzione php.

Problemi correlati