对象的in_arrary()替代方案

时间:2011-12-15 07:54:10

标签: 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" } [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?

4 个答案:

答案 0 :(得分:1)

您的对象数据是如何存储的?

如果是这样的话:

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

然后,您可以调用isset($obj -> $key)之类的内容,其中$obj是您班级的实例,$key是您希望查看的变量名称是否存在。

答案 1 :(得分:1)

你所要求的似乎很奇怪。您在做什么需要测试对象中的成员资格?

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

$object = new stdClass();
$object->a = 1;
in_array(1, (array) $object); // True

然而,这会破坏任何非平凡的对象:

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!!!!

以下功能将更接近您描述的内容。但它找不到使用Magic Methods计算的属性。

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;
}

答案 2 :(得分:0)

没有内置功能,但您可以实现类似:

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'));

答案 3 :(得分:0)