Получить позицию первой заглавной буквы в строке с помощью php

У меня есть массив, в котором разные буквы в каждом слове заглавны, как:

яблоко, апельсин, банан, манго, папайя

Я хочу получить позицию первой буквы, которая является заглавной. И распорядитесь ими соответственно. То есть слово, которое имеет первую букву, будет первым, а затем со второй буквой капитал будет вторым и т. д... Как

оранжевый
Папайя!--10--> aAple
манго!--10--> банан

Если два слова приходят с заглавной буквы в том же положении, например, в списке выше Оранжевый и Pappaya поставляется с первой буквы в качестве капитала, то они должны быть отсортированы в алфавитном порядке.

Это очень трудно достичь в php?

4 ответов


вы могли бы использовать strcspn()

найти длину начального сегмента, не соответствующего маске

например:

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

Код

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

выход

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

вы используете эту функцию для выполнения (обратной) сортировки.


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

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

есть так много способов сделать это. Используйте тот, который вы считаете наиболее логичным. :)

Это просто возвращает первую часть строки в первую заглавную букву. Затем я вычисляю длину строки и вычитаю на 1.


Если вы используете PHP > 5.3, вы можете использовать это:

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

в противном случае вам нужно создать другую функцию в качестве замены лямбда-функции.

выход: 1, 0, 2, 1, 0


Если вы хотите не причудливый способ, чтобы сделать это , вот мое предложение :

* * для получения шапки позиции *

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

используйте ассоциативный массив для хранения posn Caps в массиве .например, array ['aPple'] = '1' и так далее. затем используйте функции сортировки php для сортировки. Функции сортировки PHP можно найти по адресу:http://php.net/manual/en/array.sorting.php