Получить позицию первой заглавной буквы в строке с помощью 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