2010-08-03 5 views
1

나는 두 배열이있다. 첫 번째는 외모와 같은 :배열 값 일치 - 리턴 키

Array1 
(
    [14] => foo 
    [15] => bar 
    [16] => hello 
} 

과 sencond은 다음과 같습니다

Array2 
(
    [Label1] => foo 
    [Label2] => bar 
    [Label3] => hello 
    [Label4] => foo 
    [Label5] => bar 
} 

내가 배열 2에 대한 배열 1의 값을 비교하고자이 일치하는 경우, 내가 해당 키를 반환하고 싶습니다 배열 2의

도움이 될 것입니다. 감사합니다

+1

가 같은 값 또는 모든 키가 "첫 번째"키를할까요? – Gumbo

+0

"첫 번째"키는 동일한 값을가집니다. 따라서 기본적으로 array1의 각 항목을 반복하고 값이 array2와 일치하면 array2에서 해당 키를 반환합니다. – Rock2

+0

와우, 좋아요. 모두에게 감사드립니다! – Rock2

답변

3

당신은 두 배열의 교회법을 얻을 수 array_intersect를 사용할 수 있습니다

$arr1 = array(
    14=>'foo', 
    15=>'bar', 
    16=>'hello' 
); 
$arr2 = array(
    'Label1'=>'foo', 
    'Label2'=>'bar', 
    'Label3'=>'hello', 
    'Label4'=>'foo', 
    'Label5'=>'bar' 
); 
var_dump(array_intersect($arr2, $arr1)); 

이 반환

array(5) { 
    ["Label1"]=> 
    string(3) "foo" 
    ["Label2"]=> 
    string(3) "bar" 
    ["Label3"]=> 
    string(5) "hello" 
    ["Label4"]=> 
    string(3) "foo" 
    ["Label5"]=> 
    string(3) "bar" 
} 

이 결과 배열의 키를 얻으려면, array_keys를 사용합니다. 각 중복 값의 첫 번째 키를 얻고 싶은 경우에,를 통해 보내 array_unique 첫째 :

var_dump(array_keys(array_unique(array_intersect($arr2, $arr1)))); 

이 당신을 얻을 것이다 :

array(3) { 
    [0]=> 
    string(6) "Label1" 
    [1]=> 
    string(6) "Label2" 
    [2]=> 
    string(6) "Label3" 
} 
0

당신은 이런 식으로 약 갈 수

$array1 = array(14 => "foo", 15 => "bar", 16 => "hello"); 
$array2 = array("Label1" => "foo", "Label2" => "bar", "Label3" => "hello", "Label4" => "foo", "Label5" => "bar", "Label5" => "test"); 
$result = array_intersect($array2, $array1); 
echo '<pre>'; 
print_r($result); 

출력 :

Array 
(
    [Label1] => foo 
    [Label2] => bar 
    [Label3] => hello 
    [Label4] => foo 
) 

추가 정보 : 당신은

<?php 
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red"); 
$array2 = array("a" => "green", "yellow", "red"); 
$result_array = array_intersect_assoc($array1, $array2); 
print_r($result_array); 
?> 
The above example will output: 
    Array 
(
    [a] => green 
) 
0

내장 함수.

//$arr1, $arr2 as per Gumbo's answer... 

$hash = array_flip($arr1); 
$keys = array(); 
foreach($arr2 as $key => $val) 
    if(isset($hash[$val])) 
     $keys[] = $key; 
0

간단한 루프의 폭포보다 훨씬 빠르고 청소기 될 것 array_intersect_assoc 확인 할 수 있습니다

1

당신은 항상 반복 "를"악명 높은 무차별를 사용할 수 있습니다

이 당신에게 일치하는 값의 모든 키를 가져옵니다.
첫 번째 코드를 얻으려면이 코드를 간단하게 수정하면됩니다.


PHP 코드 :

 
$arr1 = array(
    14=>'foo', 
    15=>'bar', 
    16=>'hello' 
); 
$arr2 = array(
    'Label1'=>'foo', 
    'Label2'=>'bar', 
    'Label3'=>'hello', 
    'Label4'=>'foo', 
    'Label5'=>'bar' 
); 

$results = array(); 
foreach($arr1 as $val) 
    foreach($arr2 as $key=>$val2) 
    if($val == $val2) array_push($results, $key); 
    // or to get just the first, 
    // replace the if statement with 
    // 
    // if($val == $val2) { 
    // $result = $key; 
    // break 2; 
    // } 

print_r($results); 

결과는 다음과 같습니다

 
array(3) { 
    [0] => "Label1", 
    [1] => "Label2", 
    [2] => "Label3" 
}