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

您需要先在数组上使用ksort以再次按索引对其进行排序,然后才能获得您可能想要/期望的常规 foreach 行为。

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 回答