Php 对象的in_Array()的替代项
我发现该值存在于php中的对象数组中 我不想遍历整个对象数组,它们在php中对对象是否有类似于Is_array()的替代方法 编辑: 如果我是var_dump($te_ws),那么它会显示这个输出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" }
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;
}