Php 对象的in_Array()的替代项

Php 对象的in_Array()的替代项,php,Php,我发现该值存在于php中的对象数组中 我不想遍历整个对象数组,它们在php中对对象是否有类似于Is_array()的替代方法 编辑: 如果我是var_dump($te_ws),那么它会显示这个输出 array(2) { [0]=> object(stdClass)#22 (3) { ["id"]=> string(2) "12" ["fk_webapp_id"]=> string(1) "3" ["fk_tenant_id"]=> string(2) "12" }

我发现该值存在于php中的对象数组中

我不想遍历整个对象数组,它们在php中对对象是否有类似于Is_array()的替代方法

编辑: 如果我是var_dump($te_ws),那么它会显示这个输出

array(2) { [0]=> object(stdClass)#22 (3) { ["id"]=> string(2) "12" ["fk_webapp_id"]=>     string(1) "3" ["fk_tenant_id"]=> string(2) "12" } [1]=>     object(stdClass)#25 (3) { ["id"]=> string(2) "13" ["fk_webapp_id"]=> string(1) "5"     ["fk_tenant_id"]=> string(2) "12" } }


$is_checked = FALSE;
if (!empty($te_ws)) {
 foreach ($te_ws as t) {
  if ($t->id === 4) {
    $is_checked = TRUE;
  }
 }
}


是否可以使用php内置函数检查对象数组中的值4是否存在?

对象数据是如何存储的

如果是这样的话:

class Obj
{
    public $key1 = "data";
    public $key2 = "data";
    public $key3 = "data";
    public $key4 = "data";
}

然后您可以调用类似于
isset($obj->$key)
的东西,其中
$obj
是类的实例,
$key
是您要查看是否存在的变量名。

没有内置函数,但您可以实现如下内容:

class A {
  public $a = 'value';
  public $b = 'value2';

  public function contains($value) {
    return  in_array($value, (array)$this);
  }
}

$o = new A;
var_dump($o->contains('value2'));
var_dump($o->contains('value3'));

就像Tony saids一样,使用你想要的东西似乎很奇怪。您在做什么,需要测试对象中某个值的成员资格

在简单情况下,您可以将对象强制转换为数组:

$object=newstdclass();
$object->a=1;
在_数组(1,(数组)$object);//真的
但是,对于任何非平凡对象,这都会发生故障:

class MyClass {
    public $var1 = 1;
    private $var2 = 2;
    protected $var3 = 3;
}

$mc = new MyClass();

var_dump((array) $mc); // all properties, even private ones, are included
in_array(2, (array) $mc); // TRUE, even though you can't GET this value!
$mc->var2;  // PHP DIES with FATAL ERROR!!!!
下面的函数将更接近您所描述的。但它找不到使用计算的属性


in_array
检查值,而不是键。@托尼:请让我试试:)@WesleyvanOpdorp:我们确实想检查值而不是键,那么,是否可以使用一些内置函数?这不是存储和处理数据的好方法,因此不存在合适的方法。不过,您可以尝试@Tony:isset将检查索引,但我们要比较值?什么是“对象数组”?在PHP中,对象和数组是完全不同的(与javascript不同,如果你熟悉的话)。@FrancisAvila:是的,我在PHP中使用对象数组-(可以用foreach循环查找,但它一定很昂贵,所以尽量找到一些检查的函数:))你能给我们看一些代码吗?您不能使用foreach遍历对象的属性(您的问题听起来就是这样)。你是说迭代器吗?或者你的意思是“一系列对象”?您的问题非常不清楚。@FrancisAvila:我已经编辑了我的问题,其中$te_ws是一个对象,有两个值,即id和sub_id,我们正在尝试查找id。
$te_ws
$t
的类型是什么?您也意识到,即使
$t
是一个数组,
in_array()
在这里也不会有用!请您建议“in_array(1,(array)$object);”类型的代码为什么不在我们提供的场景中工作?
function in_object($needle, $haystack, $strict=False) {
    if (!is_object($haystack)) {
        throw new InvalidArgumentException("\$haystack is not an object");
    }
    $reflector = new ReflectionObject($haystack);
    $publicproperties = $reflector->getProperties(ReflectionProperty::IS_PUBLIC);
    foreach ($publicproperties as $property) {
        $value = $property->getValue($haystack);
        if (($strict) ? $value===$needle : $value==$needle) {
            return True;
        }
    }
    return False;
}