[英]How can I get an object “key” from the value? Is there something like array_search for objects?
我有一个这样的课:
stdClass Object
(
[id] => 1
[items] => stdClass Object
(
[0] => 123
[1] => 234
[2] => 345
[3] => 456
)
)
)
让我们调用上面的对象$foo
。
假设$v = 234
。 给定$foo
和$v
,如何返回“key” 1
?
如果$foo->items
是一个数组,我只需要做$key = array_search($v,$foo->items);
。 但这不适用于某个对象。
如何在不使用某些foreach
的对象循环的情况下找到$v
的键?
使用get_object_vars
并搜索返回的数组。
参考 : http : //php.net/manual/en/function.get-object-vars.php
这是一个如何搜索为键返回的数组的示例:
<?php
$foo = NULL;
$foo->id = 1;
$foo->items = array(123, 234, 345, 456);
$foo_array = get_object_vars($foo);
print_r($foo_array);
foreach ($foo_array as $key => $value) {
if ($value == 1) {
echo $key;
}
}
?>
输出:
Array
(
[id] => 1
[items] => Array
(
[0] => 123
[1] => 234
[2] => 345
[3] => 456
)
)
id
CodePad : http : //codepad.org/in4w94nG
正如您在示例中所示,您正在处理stdClass
对象。 这些与数组非常相似,使用PHP可以轻松地在这两者之间进行转换 :
$object = $foo->items;
$key = array_search($v, (array)$object);
^^^^^^^--- cast to array
正如这个小例子所示(我只是使用$object
变量来使转换更加可见,你通常可以把它写成一行), 从对象到数组的转换允许你使用已知函数( array_search
)宾语。
因为PHP中的数组和stdClass对象非常相似,所以这适用于两个方向:
$array = ['property' => 'value'];
$object = (object)$array;
echo $object->property; # value
这也适用于PHP中的其他类型,因此除了您的具体问题之外,还有一些值得阅读的内容:输入Juggling Docs ,但请注意,在PHP中它有许多特殊规则。 但是在数组和对象之间,它非常简单。
$key = array_search($v, get_object_vars($foo->items));
编辑:试试这个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.