web-dev-qa-db-ja.com

PHP:ある配列のキーを別の配列の値と比較し、一致を返す方法は?

私は次の2つの配列を持っています:

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

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

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

どうやってやるの?

array_diffarray_intersectを調べましたが、値を値と比較し、一方の配列の値をもう一方の配列のキーと比較していません。

11
Solace

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

新しい配列を返す:

$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]);
    }
}

PHP 5.1の時点で、_array_intersect_key_( 手動 )があります。

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

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

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

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

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

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

print_r(array_intersect_key($array_one, array_flip($array_two))); 
?> 
0
Reimi Beta

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

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);
  }
}
0
garry towel