14

次の2つの配列があります。

$array_one = array('colorZero'=>'black', 'colorOne'=>'red', 'colorTwo'=>'green', 'colorThree'=>'blue', 'colorFour'=>'purple', 'colorFive'=>'golden');

$array_two = array('colorOne', 'colorTwo', 'colorThree');

$array_oneキーが $array_two のメンバーであるキーと値のペアのみを含む配列が必要です(新しい配列を作成するか、残りの要素を から削除します$array_one)

どうやってやるの?

array_diffとを調べましarray_intersectたが、それらは値と値を比較し、一方の配列の値を他方の配列のキーと比較するのではありません。

4

3 に答える 3

27

PHP 5.1 の時点ではarray_intersect_key(マニュアル) があります。

2 番目の配列をkey=>valueからvalue=>keyに反転し、キーをarray_flip()比較するだけです。

OPの配列を比較するには、次のようにします。

$result = array_intersect_key( $array_one , array_flip( $array_two ) );

配列をループする必要はまったくありません。

于 2015-06-15T08:57:45.310 に答える
6

アップデート

Michel からの回答を確認してください: https://stackoverflow.com/a/30841097/2879722。これは、より優れた簡単なソリューションです。


元の回答

これを正しく理解している場合:

新しい配列を返す:

$array_new = [];
foreach($array_two as $key)
{
    if(array_key_exists($key, $array_one))
    {
        $array_new[$key] = $array_one[$key];
    }
}

$array_one からのストリッピング:

foreach($array_one as $key => $val)
{
    if(array_search($key, $array_two) === false)
    {
        unset($array_one[$key]);
    }
}
于 2014-08-24T14:14:25.963 に答える
0

それが機能するかどうか教えてください:

for($i=0;$i<count($array_two);$i++){
  if($array_two[$i]==key($array_one)){
     $array_final[$array_two[$i]]=$array_one[$array_two[$i]];
     next($array_one);
  }
}
于 2014-08-24T13:48:17.080 に答える