数组顺序维护/注册原始位置(php)

时间:2012-06-23 23:10:47

标签: php

我有一个像这样的数组

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

我需要的是让$ state数组从A到Z排序,并在某种结构中维护数组的原始顺序。 类似的东西:

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

等等。 我在第一种形式的数组中包含一个包含文件:这是最高效的方式,为了获得最佳解决方案,使用的相关结构是什么? 包含是在每个主页开放时完成的...... 提前致谢, 甲

3 个答案:

答案 0 :(得分:2)

您想要array_flip(),它可以切换键值和值对。

链接中的示例#2:

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

print_r($trans);

<强>输出:

Array
(
    [1] => b
    [2] => c
)

答案 1 :(得分:2)

嗯,你可以array_flip数组,从而使'values'成为原始索引,然后按键排序......

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

然后使用$b ,但值反映原始订单

答案 2 :(得分:1)

PHP为sorting arrays提供了不少功能。您可以使用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结构循环当然总是正确的。请注意,这些函数会传递给您的数组by reference,这意味着它们可以在“实时数组”上运行,而不是在副本上运行,如果您需要一个更多信息,则需要首先制作自己的副本{ {3}}