8

私は、各単語の異なる文字が大文字の配列を持っています:

アップル、オレンジ、バナナ、マンゴー、パパイヤ

大文字である最初の文字の位置を取得したい。そして、それに応じて注文します。つまり、最初の文字の大文字が最初になり、2 番目の文字の大文字が 2 番目になるという単語です。

オレンジ
パパイヤ
アップル
マンゴ
バナナ

上のリストのオレンジとパパイヤのように、同じ位置に大文字が含まれる 2 つの単語がある場合、それらはアルファベット順に並べ替える必要があります。

これをphpで達成するのは非常に難しいですか?

4

4 に答える 4

12

あなたが使用することができます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

その関数を使用して、(逆の) 並べ替えを行います。

于 2012-04-20T07:39:12.867 に答える
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

于 2012-04-20T08:00:49.863 に答える
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 を配列に格納するには、連想配列を使用します。たとえば、array['aPple'] = '1' などです。次に、php ソート関数を使用してソートします。PHP ソート関数は次の場所にあります: http://php.net/manual/en/array.sorting.php

于 2012-04-20T09:32:37.983 に答える
1
preg_match("/^.*?[A-Z]/", 'aAple', $arr);

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

これを行う方法はたくさんあります。最も論理的なものを使用してください。:)

これは、文字列の最初の部分を最初の大文字に戻すだけです。次に、文字列の長さを計算して 1 を引きます。

于 2012-04-20T07:41:18.210 に答える