2012-06-23 4 views
0

나는이 일배열 순서 유지/원래의 위치를 ​​reggistering (PHP)

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

같은 배열은 내가 필요로하는 어떤 구조로, A부터 Z까지 주문 $ 상태 배열을 가지고 유지하는 것입니다해야 배열의 원래 순서 같은 뭔가 :

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

등등. 나는 include 파일의 첫 번째 형태로 배열을 가지고있다. 가장 좋은 방법은 무엇이며, 가장 좋은 해결책을 얻기 위해 사용하는 관련 구조는 무엇인가? (가) 포함 는 ... 각 홈페이지 개막식에서 사전에 감사, 키와 값 쌍을 전환 당신은 array_flip()을 원하는

답변

2

글쎄, 당신은 따라서 '값이'일종의 다음 원래 인덱스, 그리고 만드는 배열을 array_flip 수 있습니다 열쇠로 ...

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

다음과 작동합니다. $b이지만 값은 원래 순서를 반영합니다.

+0

감사합니다. 필요한 항목입니다. – Andrea

2

A.를 수행합니다. 링크에서

예 2 :

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

print_r($trans); 

출력 :

Array 
(
    [1] => b 
    [2] => c 
) 
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 

당신은 배열에 ksort를 사용해야 할 것 먼저 인덱스를 기준으로 다시 정렬하기를 원할 것입니다. 숫자 인덱스 값으로 for 구조를 사용하여 반복

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


1: FG 
2: BU 
3: CA 

항상 물론 올바르게 기능을 사용할 수 있습니다. 이 함수는 배열 by reference을 전달 받았다는 것을 의미합니다. 즉, '라이브 배열'에서 작동하고 복사본에서는 작동하지 않는다는 것을 의미합니다. 원한다면 먼저 자신의 복사본을 만들어야합니다. 자세한 정보는 References Explained입니다.

+0

고마워, 너와 같은 해결책에 대해 생각해 봤지만 @poncha와 jared-farrish가 제안한 array_flip이 최고 다. 비슷한 기능을 잘 알고 있습니다. – Andrea