2

我想根据它们的键合并这两个数组,并且只保留键匹配。合并后的数组应保留键,值应来自第二个数组。

数组 #1:我访问过的州

Array
(
    [AL] => 113
    [AZ] => 83
    [CA] => 50
    [CO] => 1
...

数组 #2:所有状态

Array
(
    [AL] => ALABAMA
    [AK] => ALASKA
    [AZ] => ARIZONA
    [AR] => ARKANSAS
    [CA] => CALIFORNIA
    [CO] => COLORADO
    [CT] => CONNECTICUT
...

所以,如果我去过一个州,我想从数组 2 中获取该州的名称。并从数组 #2 中抛出任何不匹配的节点。

期望的结果

Array
(
    [AL] => ALABAMA
    [AZ] => ARIZONA
    [CA] => CALIFORNIA
    [CO] => COLORADO
...

我在 PHP 手册和 StackOverflow 上进行了广泛的研究,但找不到特定的答案。我认为它可能存在于一个比我目前能力更复杂的用户定义函数中。

array_merge()几乎做了我想要的,但随后它将我没有访问过的状态添加到数组的末尾

array_intersect_key()也接近了。它只保留匹配的键,但随后会删除值。

4

1 回答 1

5

在我编写更好的解决方案时,请享受这个效率较低的示例。http://codepad.org/hIjPEM81

低效解决方案1:

<?php
$allstates=array("MO"=>"Missouri", "TX"=>"Texas");
$statesIveBeenTo = array("MO"=>1);
foreach($allstates as $k=>$v){
  if(!array_key_exists($k,$statesIveBeenTo)){
    unset($allstates[$k]);
  }
}

var_dump($allstates);

输出:

array(1) {
  ["MO"]=>
  string(8) "Missouri"
}

解决方案2:

$test = array_intersect_key($allstates, $statesIveBeenTo);
var_dump($test);

与上面相同的输出。

于 2013-03-09T03:12:06.273 回答