php

2012-04-20 28 views
7

Ben dizi ettiği her kelimenin farklı harf gibi başkentidir yaşıyorum kullanarak bir dizedeki ilk harf pozisyonunu alın php

Başkentin ilk harfinin konumunu almak istiyorum. Ve buna göre sipariş ver. İkinci harf sermaye ile daha sonra ilk olacak ilk harf sermayesi vardır kelimedir ve gibi ...

Turuncu
Papaya
aAple
mango
muz

vb ikinci olacak

Eğer iki kelime aynı konumda büyük harfle gelirse, örneğin yukarıdaki listede Turuncu ve Pappaya ilk harfi büyük harfle birlikte gelir, sonra alfabetik olarak sıralanırlar. etik düzen.

Php'ye ulaşmak bu kadar zor mu?

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

Tam Kanunu

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

+0

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

cevap

11

Sen ilk segmentin strcspn()

Bul uzunluğunu kullanabilirsiniz Örneğin

maske uymayanÇıkış

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

Bu işlevi, (ters) sıralama yapmak için kullanırsınız.

+4

Tüm alfabeye sahip olma fikrini beğenmediyseniz (her ne sebeple olursa olsun), strcspn ('aAple', implode ('', range ('A', 'Z'))) 'yi kullanabilirsiniz; ' –

+1

@RobinCastlin' implode' ifadeniz sadece bir karakteri kaydeder ;-) –

+0

Evet, bu doğrudur . Ama sistemin A'dan Z'ye gitmesini ve sonra yazmamı tercih ederim. : D Belki bir mektubu unuttum! –

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

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

Bunu yapmanın pek çok yolu vardır. En mantıklı olanı kullanın.

Bu, yalnızca dizenin ilk bölümünü ilk Büyük Harf'e döndürür. Sonra dize uzunluğunu hesaplamak ve PHP> 5.3 kullanıyorsanız bunu kullanabilirsiniz 1.

1

tarafından çıkarılacak:

$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)); 

Aksi takdirde lambda fonksiyonu için yedek olarak başka bir işlevi oluşturmak zorunda.

Çıktı: bunu yapmak için olmayan bir fantezi yolunu istiyorsanız işte benim öneri 1, 0, 2, 1, 0

0

:

Gettings için

** kapakları pozisyon *

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; 
    } 
    } 
} 

kullanın bir Caps dizisini dizide saklamak için ilişkisel dizi .eg dizi ['aPple'] = '1' vb. sonra sıralamak için php sort işlevlerini kullanın. PHP sıralama işlevleri şu adreste bulunabilir: http://php.net/manual/en/array.sorting.php