0

キーと値のペアの数が等しい 2 つの連想配列がある場合、両方に存在するキーと値のペアを提供する 3 番目の配列を作成する効率的な方法はありますか。同一のキーまたは同一の値だけでなく、同一のキーと値のペアである必要があります (array_intersect は同一のキーのみを識別します)。乾杯

4

4 に答える 4

3
$array3 = array_intersect_assoc($array1, $array2);

array_intersect_assocについて説明している PHP マニュアルを参照してください。 array_intersect_assoc() は、すべての引数に存在する array1 のすべての値を含む配列を返します。array_intersect() とは異なり、比較ではキーが使用されることに注意してください。

于 2013-07-18T19:51:55.360 に答える
1

$a$bが配列の場合、次のよう$cに3 番目の配列を取得できます。

$c = array_intersect_assoc($a, $b);

ネイティブのarray_intersect_assoc関数を使用しました。

于 2013-07-18T20:15:02.730 に答える
0

簡単にするために、両方の配列をマージしてから重複を削除します

両方の配列をマージします。

    function merge_common_keys(){
    $arr = func_get_args();
    $num = func_num_args();

    $keys = array();
    $i = 0;
    for($i=0;$i<$num;++$i){
        $keys = array_merge($keys, array_keys($arr[$i]));
    }
    $keys = array_unique($keys);

    $merged = array();

    foreach($keys as $key){
        $merged[$key] = array();
        for($i=0;$i<$num;++$i){
            $merged[$key][] = isset($arr[$i][$key])?$arr[$i][$key]:null;
        }
    }
    return $merged;
}

マージしてから重複を削除

$merged = merge_common_keys($array1,$array2);    

$unique = array_unique($merged );
于 2013-07-18T19:58:33.407 に答える
0

配列の両方でキーを取得し、両方の配列で値を取得する方法は知っていますが、キーと値の共通部分は知りません。ただし、複雑ではありません。配列 $a と $b があり、配列 $c を作成したいとします。

$c = array();
foreach($a as $k=>$v) if($b[$k] == $v) $c[$k]=$v;

$b[$k] が設定されていないとエラーがスローされますが、必要に応じて無視できます。

于 2013-07-18T19:54:15.223 に答える