我有两个数组。第一个看起来像:
Array1
(
[14] => foo
[15] => bar
[16] => hello
}
和sencond看起来像:
Array2
(
[Label1] => foo
[Label2] => bar
[Label3] => hello
[Label4] => foo
[Label5] => bar
}
我想比较array1与array2的值,如果它们匹配,我想返回array2的相应键。
任何帮助将不胜感激。感谢
答案 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;