0

私はこのような配列を持っています

$state[1]='FG';
$state[2]='BU';
$state[3]='CA';
...
$state[150]='YT'

私が必要としているのは、$state 配列を A から Z までの順序で並べ、何らかの構造で配列の元の順序を維持することです。何かのようなもの:

$state_ordered['BU']=2;
$state_ordered['CA']=3;

等々。インクルード ファイルの最初の形式の配列があります。最もパフォーマンスの高い方法と、最適なソリューションを得るために使用する関連構造はどれですか? インクルードは、ホームページを開くたびに行われます... よろしくお願いします、A.

4

3 に答える 3

2

array_flip()キーと値のペアを切り替える必要があります。

リンクからの例#2:

$trans = array("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip($trans);

print_r($trans);

出力:

Array
(
    [1] => b
    [2] => c
)
于 2012-06-23T23:14:40.587 に答える
2

さて、array_flip配列を作成して、「値」を元のインデックスにしてから、キーで並べ替えることができます...

$b = array_flip($a);
ksort($b);

次に$b キーを操作しますが、値は元の順序を反映します

于 2012-06-23T23:15:40.363 に答える
1

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構造を使用したループは、常に正しく機能します。これらの関数は参照によって配列に渡されることに注意してください。つまり、コピーではなく「ライブ配列」で機能します。必要に応じて、最初に独自のコピーを作成する必要があります。詳細については、「参照の説明」を参照してください。

于 2012-06-23T23:31:47.293 に答える