数组值匹配 - 返回键

时间:2010-08-03 16:21:22

标签: php arrays

我有两个数组。第一个看起来像:

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

和sencond看起来像:

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

我想比较array1与array2的值,如果它们匹配,我想返回array2的相应键。

任何帮助将不胜感激。感谢

5 个答案:

答案 0 :(得分: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"
}

答案 1 :(得分: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"
}

答案 2 :(得分: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
)

更多信息:

答案 3 :(得分:0)

您可能想要检查array_intersect_assoc

<?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
 )

答案 4 :(得分: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;