in_array如何检查对象是否在对象数组中?

yel*_*ott 13 php object-comparison

是否in_array()做对象比较,它检查所有属性都是一样的吗?如果$obj1 === $obj2它只是做指针比较呢?

我正在使用ORM,所以我宁愿循环测试对象,如果$obj1->getId()它已经在数组中,如果它进行对象比较.如果没有,in_array则更简洁.

Dav*_*dom 29

in_array()确实松散比较($a == $b),除非你传递TRUE给第三个参数,在这种情况下它严格比较($a === $b).

从语义上讲,in_array($obj, $arr)与此完全相同:

foreach ($arr as &$member) {
  if ($member == $obj) {
    return TRUE;
  }
}
return FALSE;
Run Code Online (Sandbox Code Playgroud)

......并且in_array($obj, $arr, TRUE)与此相同:

foreach ($arr as &$member) {
  if ($member === $obj) {
    return TRUE;
  }
}
return FALSE;
Run Code Online (Sandbox Code Playgroud)

......并引用手册,说明实际检查的内容:

使用比较运算符(==)时,会以简单的方式比较对象变量,即:如果两个对象实例具有相同的属性和值,则它们是相等的,并且是同一类的实例.

另一方面,当使用标识运算符(===)时,当且仅当它们引用同一类的同一实例时,对象变量才相同.