PHPには、配列をソートするためのかなりの数の関数があります。asort()を使用して配列を保持している値でアルファベット順に並べ替えてから、array_search()を使用してインデックスを取得できます。
そのような:
?php
$state[1]='FG';
$state[2]='BU';
$state[3]='CA';
asort($state);
$key = array_search('BU',$state);
print $state[$key] . PHP_EOL;
print_r($state);
これは出力します
BU
Array
(
[2] => BU
[3] => CA
[1] => FG
)
ご覧のとおり、配列の元のインデックス値を保持しています。ただし、これは、インデックスを直接使用せずに配列をループする場合、たとえばforeachを使用する場合のように、配列を並べ替えた順序でループすることを意味します。
foreach($state as $key=>$value){
print "$key: $value" . PHP_EOL;
}
2: BU
3: CA
1: FG
おそらく必要/期待する通常のforeach動作を取得する前に、最初に配列でksortを使用して、インデックスで再度並べ替える必要があります。
ksort($state);
foreach($state as $key=>$value){
print "$key: $value" . PHP_EOL;
}
1: FG
2: BU
3: CA
もちろん、数値インデックス値を持つfor構造を使用したループは、常に正しく機能します。これらの関数は参照によって配列に渡されることに注意してください。つまり、コピーではなく「ライブ配列」で機能します。必要に応じて、最初に独自のコピーを作成する必要があります。詳細については、「参照の説明」を参照してください。