Php 数组值匹配-返回键
我有两个数组。第一个看起来像:Php 数组值匹配-返回键,php,arrays,Php,Arrays,我有两个数组。第一个看起来像: Array1 ( [14] => foo [15] => bar [16] => hello } Array2 ( [Label1] => foo [Label2] => bar [Label3] => hello [Label4] => foo [Label5] => bar } 第二个看起来像: Array1 ( [14] => foo [15
Array1
(
[14] => foo
[15] => bar
[16] => hello
}
Array2
(
[Label1] => foo
[Label2] => bar
[Label3] => hello
[Label4] => foo
[Label5] => bar
}
第二个看起来像:
Array1
(
[14] => foo
[15] => bar
[16] => hello
}
Array2
(
[Label1] => foo
[Label2] => bar
[Label3] => hello
[Label4] => foo
[Label5] => bar
}
我想比较array1和array2的值,如果它们匹配,我想返回对应的array2键
任何帮助都将不胜感激。谢谢您可以使用来获取两个阵列的交点:
$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(3) {
[0]=>
string(6) "Label1"
[1]=>
string(6) "Label2"
[2]=>
string(6) "Label3"
}
可以使用获取两个阵列的交点:
$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(3) {
[0]=>
string(6) "Label1"
[1]=>
string(6) "Label2"
[2]=>
string(6) "Label3"
}
你可以这样做:
$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);
更多信息:
- 你可以这样做:
$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);
更多信息:
//$arr1, $arr2 as per Gumbo's answer...
$hash = array_flip($arr1);
$keys = array();
foreach($arr2 as $key => $val)
if(isset($hash[$val]))
$keys[] = $key;
上述示例将输出:
排列
(
[a] =>绿色
)
您可能需要检查数组\u intersect\u assoc
//$arr1, $arr2 as per Gumbo's answer...
$hash = array_flip($arr1);
$keys = array();
foreach($arr2 as $key => $val)
if(isset($hash[$val]))
$keys[] = $key;
上述示例将输出:
排列
(
[a] =>绿色
)
一个简单的循环将比一系列内置函数更快、更干净
$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);
一个简单的循环将比一系列内置函数更快、更干净 $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);
您始终可以使用臭名昭著的暴力“for”迭代:
这将获取匹配值的所有键
要获得第一个,您需要对该代码进行简单修改
PHP代码: array(3) { [0] => "Label1", [1] => "Label2", [2] => "Label3" } $arr1=数组( 14=>“foo”, 15=>“巴”, 16=>“你好” ); $arr2=数组( “Label1”=>“foo”, 'Label2'=>'bar', 'Label3'=>'hello', “Label4”=>“foo”, 'Label5'=>'bar' ); $results=array(); 外汇($arr1作为$val) foreach($arr2作为$key=>$val2) 如果($val==$val2)数组_push($results,$key); //或者只是第一次, //将if语句替换为 // //如果($val==$val2){ //$result=$key; //破口2; // } 打印(结果);
结果是: 阵列(3){ [0]=>“标签1”, [1] =>“标签2”, [2] =>“Label3” }
您始终可以使用臭名昭著的暴力“for”迭代:
这将获取匹配值的所有键
要获得第一个,您需要对该代码进行简单修改
PHP代码: array(3) { [0] => "Label1", [1] => "Label2", [2] => "Label3" } $arr1=数组( 14=>“foo”, 15=>“巴”, 16=>“你好” ); $arr2=数组( “Label1”=>“foo”, 'Label2'=>'bar', 'Label3'=>'hello', “Label4”=>“foo”, 'Label5'=>'bar' ); $results=array(); 外汇($arr1作为$val) foreach($arr2作为$key=>$val2) 如果($val==$val2)数组_push($results,$key); //或者只是第一次, //将if语句替换为 // //如果($val==$val2){ //$result=$key; //破口2; // } 打印(结果);
结果是: 阵列(3){ [0]=>“标签1”, [1] =>“标签2”, [2] =>“Label3” }
您想要具有相同值的“第一”键还是每个键?“第一”键具有相同值。因此,基本上在array1上迭代每个键,如果值与array2匹配,则从array2返回该键。您想要具有相同值的“first”键还是具有相同值的“first”键。因此,基本上在array1上迭代每个键,如果值与array2匹配,则从array2返回该键。