1

比較している2つのアレイがあります。比較は次のように完全に機能しています。

  $tmp = array_diff_key($arr1, $arr2);
  $echo $tmp;

ただし、配列1には存在しない配列2に存在する値のみを表示したいと思います。

編集:わかりました、みんなの助けに感謝します。しかし、私はまだそれを機能させることができません。

私は今使っています

   $tmp = array_diff($arr2, $arr1);
  var_dump($tmp);

これは以下を出力します:

  array(1) { [0]=> array(3) { [0]=> string(4) "cars" [1]=> string(4) "vans" [2]=> string(6) "people" } }

それで、少し説明します。

アレイ1には車、バンがあります(これはデータベースから取得されます)。

配列2には車、人がいます(これはフォームから入力されます)。

データベースにない値のみを表示しようとしているので、車がデータベースにあり、バンが$ arr1にあるので、$tmpは人だけをエコーすると思いました。

私がそれを書くのを混乱させることさえあるので、それが明確であることを願っています;)

両方の配列を個別にvar_dumpすると、次のようになります。

    array(3) { [0]=> NULL [1]=> string(4) "cars" [2]=> string(4) "vans" } array(1) { [0]=> array(2) { [0]=> string(6) "people" [1]=> string(5) "tanks" } }
4

6 に答える 6

2
$tmp = array_diff_key($arr2, $arr1);
$echo $tmp;

echo $tmp'Array'私が思うに出力するだけなので、おそらくそれをループして(おそらくでforeach)個々の値を表示するか、を使用する必要がありますvar_dump

array_diff_keyキー、array_diff値(質問で「値」について言及します)でも機能します。

于 2013-02-05T16:20:11.843 に答える
2

を使用しarray_intersectます。array_intersect両方にある値を与えます。

$tmp2 = array_intersect($arr1, $arr2);
var_dump($tmp2);

編集:質問を読み間違えました。array_diff目的を果たします。array_diff残りの引数には存在しないargument1からの値を返します。

$tmp2 = array_diff($arr2, $arr1);
var_dump($tmp2);

編集:あなたの場合、あなた$arr2はその中に値を持つ配列を持っています。だから、あなたはする必要がありますarray_diff($arr2[0], $arr1);

これが実用的なフィドルです。

于 2013-02-05T16:20:23.537 に答える
1

あなたは次のようにすることができます:

foreach($tmp as $key=>$value) {
    if(isset($arr2[$key])) {
        echo $arr2[$key];
    }
}
于 2013-02-05T16:20:19.340 に答える
1

私の理解ではarray_diff_key、この関数は、キーが他のどの配列にも存在しない、argument1からのすべてのエントリを含む配列を返します。したがって$arr2、最初の引数に入れてください。

したがって、コードは次のようになります。

$tmp = array_diff_key($arr2, $arr1);
$echo $tmp;

ソース

于 2013-02-05T16:20:49.117 に答える
1

方向を入れ替えます:

$tmp = array_diff_key($arr2, $arr1);
  $echo $tmp;
于 2013-02-05T16:21:22.687 に答える
1

キー値ではなく値に関心がある場合は、を使用する必要がありますarray_diff()。また、パラメーター内の配列の順序を逆にする必要があります。最後に、配列をエコーし​​ても、必要なものが表示されません。を使用してくださいvar_dump()。それで、それをすべてまとめます:

$tmp = array_diff($arr2, $arr1);
var_dump($tmp); 
于 2013-02-05T16:21:59.377 に答える