14

in_array()すべての属性が同じであることを確認するオブジェクト比較を行いますか?もしそうなら$obj1 === $obj2、代わりにポインタ比較を行うだけでしょうか?

私はORMを使用しているので、$obj1->getId()オブジェクトの比較を行う場合は、オブジェクトがすでに配列にあるかどうかをテストするオブジェクトをループします。そうでない場合は、in_arrayはるかに簡潔です。

4

2 に答える 2

30

in_array()3番目の引数に渡さない限り、緩い比較()を実行します。この場合、厳密な比較()を実行します。$a == $bTRUE$a === $b

意味的にin_array($obj, $arr)は、これと同じです。

foreach ($arr as &$member) {
  if ($member == $obj) {
    return TRUE;
  }
}
return FALSE;

...そしてin_array($obj, $arr, TRUE)これと同じです:

foreach ($arr as &$member) {
  if ($member === $obj) {
    return TRUE;
  }
}
return FALSE;

...そしてこれが実際に何をチェックするかについてのマニュアルを引用するには:

比較演算子(==)を使用する場合、オブジェクト変数は単純な方法で比較されます。つまり、2つのオブジェクトインスタンスは、同じ属性と値を持ち、同じクラスのインスタンスである場合に等しくなります。

一方、恒等演算子(===)を使用する場合、オブジェクト変数は、同じクラスの同じインスタンスを参照する場合にのみ同一です。

于 2012-07-31T15:26:46.347 に答える
0

オブジェクトはPHP5以降では常に参照であり、を使用してのみコピーできます(したがって、新しいオブジェクトを作成できます)clone

つまり、を使用できるはずですin_array()

于 2012-07-31T15:26:28.520 に答える