我想基于它们的键合并这两个数组,并且只保留键匹配。合并后的数组应保留键,值应来自第二个数组。
数组#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()
也接近了。它只保留匹配的键,但随后它会删除值。
答案 0 :(得分: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);
与上面相同的输出。