2012-04-20 10 views
7

Sto avendo matrice in quale lettera diversa in ogni parola è la capitale come:Ottenere la posizione della lettera prima capitale in una stringa utilizzando php

mela, arancia, banana, mango, papaia

Voglio ottenere la posizione della prima lettera che è capitale. E ordinali di conseguenza. Questa è la parola che ha prima capitale lettera saranno primi, e poi con la seconda capitale lettera sarà il secondo, ecc ... Come

Arancione
Papaya
aAple
Mango
Banana

Se due parole arrivano con la lettera maiuscola nella stessa posizione, ad esempio nell'elenco sopra riportato Orange e Pappaya viene fornito con la prima lettera come capitale, quindi devono essere ordinati in ordine alfabetico ordine etico.

È molto difficile da ottenere in PHP?

+0

http://mattgemmell.com/2008/12/08/quello-have-you-tried – Jashwant

risposta

11

Si potrebbe utilizzare strcspn()

lunghezza Ricerca del segmento iniziale che non soddisfa maschera

Ad esempio:

echo strcspn('aAple', 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ'); 
// prints '1' - the string starts with 1 character not in upper case 

Codice completa

echo "<pre>" ; 
$array = array("aPple", "Orange", "baNana", "mANgo", "Papaya"); 
foreach($array as $value) 
{ 
    echo $value , "= " , strcspn($value, 'ABCDEFGHJIJKLMNOPQRSTUVWXYZ') . PHP_EOL; 
} 

Uscita

aPple= 1 
Orange= 0 
baNana= 2 
mANgo= 1 
Papaya= 0 

Questa funzione consente di eseguire l'ordinamento (inverso).

+4

Se non ti piace l'idea di avere l'intero alfabeto (per qualsiasi motivo), puoi usare 'strcspn ('aAple', implode ('', range ('A', 'Z')))' –

+1

@RobinCastlin L'istruzione 'implode' salva solo un carattere però ;-) –

+0

Sì, è vero . Ma preferisco lasciare che il sistema vada dalla A alla Z, quindi lo scrivo da solo. : D Forse dimentico una lettera! –

1
preg_match("/^.*?[A-Z]/", 'aAple', $arr); 

$str_position = (strlen($arr[0]) - 1); 

Ci sono tanti modi per farlo. Usa quello che trovi più logico. :)

Questo restituisce semplicemente la prima parte della stringa alla prima lettera maiuscola. Poi ho calcolare la lunghezza della stringa e sottrarre dal 1.

1

Se si utilizza PHP> 5.3 è possibile utilizzare questo:

$test = array("aPple", "Orange", "baNana", "mANgo", "Papaya"); 

echo implode(', ', array_map(function($value){ 
    $matches = array(); 
    preg_match('/[A-Z]/', $value, $matches, PREG_OFFSET_CAPTURE); 
    return $matches[0][1]; 
}, $test)); 

In caso contrario è necessario creare un'altra funzione come sostituto per la funzione lambda.

uscita: 1, 0, 2, 1, 0

0

Se vuoi un modo non-fantasia per farlo, ecco il mio suggerimento:

** per gettings tappi posizione *

function getCapsPosn($str) 
{ 
    $i = 0; 
    $CapsPosn = -1; 
    for ($i =0 ; $i < strlen($str) ; $i++) 
    { 
    if ((ord($str[$i]) >= 65) && (ord($str[$i]) <= 90)) 
    { 
     //echo ord($str[$i]); 
     $CapsPosn = $i; 
     return $CapsPosn; 
    } 
    } 
} 

Utilizzare un array associativo per memorizzare i Caps posn nell'array .eg array ['aPple'] = '1' e così via. quindi utilizzare le funzioni di ordinamento php per ordinarlo. Le funzioni di ordinamento del PHP sono disponibili al numero: http://php.net/manual/en/array.sorting.php

Problemi correlati