2

キーに基づいてこれら 2 つの配列をマージし、一致するキーのみを保持したいと思います。マージされた配列はキーを保持する必要があり、値は 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 に答える