2013-02-08 5 views
0

값을 기반으로 배열의 키를 가져 오려고합니다.고유 한 배열 키를 검색하는 방법은 무엇입니까?

$array1=array(
'0'=>'test1', 
'1'=>'test2', 
'2'=>'test3', 
'3'=>'test1' 
) 

$array2=array(
'0'=>'11', 
'1'=>'22', 
'2'=>'33', 
'3'=>'44' 
) 

나는

$source

바늘입니다 있습니다. 그것은 ' test1', ' test2'또는 ' test3'

for loop to get different $source string 

    if(in_array($source[$i], $array1)){ 
     $id=array_search($source[$i],$array1); 
     //I want to output 11, 22 or 33 based on $source 
     //However, my $array1 has duplicated value. 
     //In my case, if $source is test1, the output will be 11,11 instead of 11 and 44 

     echo $array2[$id]); 
    } 

나는이 문제를 해결하는 방법을 잘 모르겠습니다 수 있습니다. 내 머리가 튀었 어. 도와 주셔서 감사합니다!

답변

1

이렇게하면됩니다.

$array3 = array_flip(array_reverse($array1, true)); 
$needle = $source[$i]; 
$key = $array3[$needle]; 
echo $array2[$key]; 

array_flip은 키와 값을 교환합니다. 값이 중복되는 경우 마지막 쌍만 교환됩니다. 이 문제를 해결하기 위해 array_reverse을 사용하지만 키 구조는 그대로 유지합니다.

편집 : 더 명확히하기 위해 다음은 마른 실행입니다. http://php.net/manual/en/function.array-keys.php

:

$array1=array(
'0'=>'test1', 
'1'=>'test2', 
'2'=>'test3', 
'3'=>'test1' 
) 

array_reverse($array1, true) 후 출력은 우리가 플립 할 때

지금
array(
'3' => 'test1', 
'2' => 'test3', 
'1' => 'test2', 
'0' => 'test1' 
) 

는, 출력

array(
'test1' => '0', //would be 3 initially, then overwritten by 0 
'test2' => '1', 
'test3' => '2', 
) 
+0

팁 주셔서 감사합니다! 하지만 array_flip()의 설명서를 읽은 후에는 array_flip이 문자열이나 숫자 만 값으로 허용되므로 대부분의 응용 프로그램에는 적합하지 않다고 말합니다. 그러나이 ** 경우에는 작동 할 것입니다 – hek2mgl

+0

예,이 경우 값 자체는'문자열 '입니다. 그것은'Objects' 배열이나'Arrays' 배열에서는 작동하지 않습니다. – Achrome

2

PHP이하는 기능을 갖는 것 것 즉 $keys = array_keys($myArray, $theValue);이며 첫 번째 수신자는 $keys[0];입니다.

관련 문제