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);
      
      更多信息:


      您可能需要检查数组\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] =>绿色
      )
      
      您可能需要检查数组\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返回该键。