6

気が狂ってしまうかもしれませんが、引数として 2 つの配列を取る PHP コア関数が存在すると断言できたはずです。

$a = array('1', '3');
$b = array('1'=>'apples', '2'=>'oranges', '3'=>'kiwis');

$aそして、配列からの値が配列内のキーとの衝突をチェックする交差を実行します$b。のようなものを返す

array('1'=>'apples', '3'=>'kiwis');

そのような関数は存在しますか (ドキュメントでは見逃していました)、または同じことを達成するための非常に最適化された方法はありますか?

4

4 に答える 4

10

array_flip {switches keys with their values} を使用してみてから、例で array_intersect() を使用してください。

$c = array_flip($b); // so you have your original b-array
$intersect = array_intersect($a,c);
于 2009-11-16T12:56:12.097 に答える
2

私はあなたが何を望んでいるのか100%明確ではありません。$aの値を$bのKEYSと照合しますか?

いくつかの交差関数があります:

http://php.net/manual/en/function.array-intersect.php http://www.php.net/manual/en/function.array-intersect-key.php

しかし、おそらくあなたは必要です:

http://www.php.net/manual/en/function.array-intersect-ukey.phpこれにより、キーや値を照合するための独自の関数を定義できます。

于 2009-11-16T13:00:50.610 に答える
1

foreach最初の配列を繰り返し、2番目の配列から対応する値を取得する簡単な方法を実行します。

$output = array();
foreach ($a as $key) {
    if (array_key_exists($key, $b)) {
        $output[$key] = $b[$key];
    }
}
于 2009-11-16T13:04:51.617 に答える
0

キーのテストはループに入る直前に実行されるため、ガンボの答えのバリエーションだけがより効率的です。

$intersection = array_intersect($a, array_keys($b));
$result=array();
foreach ($intersection as $key) {
    $result[$k]=$b[$k];
}
于 2009-11-16T13:33:20.003 に答える