我有一个数组,其中每个单词中的不同字母是大写的:
aPple,Orange,baNana,mANgo,Papaya
我想得到第一个字母的位置,即资本。并相应地订购它们。 这是第一个字母资本将是第一个,然后第二个字母资本将是第二个等等...像
橙
木瓜
aAple
芒果
baNana
如果两个单词在同一位置带有大写字母,例如在上面的列表中 Orange和Pappaya首字母作为首都,然后必须按字母顺序排序。
这在php中很难实现吗?
答案 0 :(得分:11)
您可以使用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
您可以使用该功能进行(反向)排序。
答案 1 :(得分:1)
preg_match("/^.*?[A-Z]/", 'aAple', $arr);
$str_position = (strlen($arr[0]) - 1);
有很多方法可以做到这一点。使用您认为最合乎逻辑的那个。 :)
这个只是将字符串的第一部分返回到第一个大写字母。然后我计算字符串长度并减去1。
答案 2 :(得分:1)
如果您使用PHP&gt; 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));
否则你必须创建另一个函数来替换lambda函数。
输出:1, 0, 2, 1, 0
答案 3 :(得分:1)
如果你想要一种非奇特的方式,我的建议如下:
**获取上限位置 *
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;
}
}
}
使用关联数组将Caps posn存储在数组中.e.g。 array ['aPple'] ='1' 等等。然后使用php排序函数对其进行排序。 PHP排序函数可在以下位置找到:http://php.net/manual/en/array.sorting.php