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

数组顺序维护/重新注册原始位置(php),php,Php,我有一个像这样的数组 $state[1]='FG'; $state[2]='BU'; $state[3]='CA'; ... $state[150]='YT' 我需要的是将$state数组从A到Z排序,并在某种结构中保持数组的原始顺序。 比如: $state_ordered['BU']=2; $state_ordered['CA']=3; 等等。 我在include文件中使用了第一种形式的数组:哪种是性能最好的方法,哪种是为了获得最佳解决方案而使用的相关结构? 包括是在每个网页打开。。。 提

我有一个像这样的数组

$state[1]='FG';
$state[2]='BU';
$state[3]='CA';
...
$state[150]='YT'
我需要的是将$state数组从A到Z排序,并在某种结构中保持数组的原始顺序。 比如:

$state_ordered['BU']=2;
$state_ordered['CA']=3;
等等。 我在include文件中使用了第一种形式的数组:哪种是性能最好的方法,哪种是为了获得最佳解决方案而使用的相关结构? 包括是在每个网页打开。。。 提前感谢,, A.

您需要的,用于切换键对和值对

链接中的示例#2:

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

print_r($trans);
输出:

Array
(
    [1] => b
    [2] => c
)
您需要,它将切换键和值对

链接中的示例#2:

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

print_r($trans);
输出:

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

嗯,您可以
array\u flip
数组,从而使“value”成为原始索引,然后按键对其排序

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

然后使用
$b
,但值反映原始顺序

好的,您可以
数组翻转
数组,从而使“值”成为原始索引,然后按键排序

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

然后使用
$b
,但是这些值反映了原始顺序

PHP有很多函数用于。您可以使用按字母顺序对数组中的值进行排序,然后使用

因此:

?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($state as $key=>$value){
  print "$key: $value" . PHP_EOL;
}


2: BU
3: CA
1: FG
在获得您可能想要/期望的常规foreach行为之前,您需要首先在数组上使用以再次按索引对其进行排序

ksort($state);
foreach($state as $key=>$value){
  print "$key: $value" . PHP_EOL;
}


1: FG
2: BU
3: CA

当然,使用带有数字索引值的结构进行循环总是正确的。需要注意的是,这些函数通过了您的数组,这意味着它们在“实时数组”上工作,而不是在副本上工作,如果您想获得更多信息,您需要先创建自己的副本。

PHP有很多函数可供使用。您可以使用按字母顺序对数组中的值进行排序,然后使用

因此:

?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($state as $key=>$value){
  print "$key: $value" . PHP_EOL;
}


2: BU
3: CA
1: FG
在获得您可能想要/期望的常规foreach行为之前,您需要首先在数组上使用以再次按索引对其进行排序

ksort($state);
foreach($state as $key=>$value){
  print "$key: $value" . PHP_EOL;
}


1: FG
2: BU
3: CA

当然,使用带有数字索引值的结构进行循环总是正确的。请注意,这些函数通过了您的阵列,这意味着它们在“实时阵列”上工作,而不是在副本上工作,如果您想获得更多信息,您需要先制作自己的副本。

谢谢,我正在考虑像您这样的解决方案,但@poncha和jared farrish提出的阵列翻转是最好的。很高兴知道类似的函数。谢谢,我正在考虑像你这样的解决方案,但是@poncha和jared farrish提出的数组翻转是最好的。很高兴知道类似的功能。