我有一个类似的课程:
stdClass Object
(
[id] => 1
[items] => stdClass Object
(
[0] => 123
[1] => 234
[2] => 345
[3] => 456
)
)
)
让我们调用上面的对象$foo
。
我们说$v = 234
。鉴于$foo
和$v
,如何返回“密钥”1
?
如果$foo->items
是一个数组,我只会$key = array_search($v,$foo->items);
。但这不适用于某个对象。
如果没有在某些$v
中遍历对象,我怎样才能找到foreach
的密钥?
答案 0 :(得分:5)
使用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
答案 1 :(得分:2)
正如您在示例中所示,您正在处理stdClass
个对象。这些非常类似于数组,使用PHP,您可以轻松地在这两者中使用名为 casting 的内容进行转换:
$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中的其他类型,所以除了你的具体问题之外,还有一些值得阅读的内容:Type JugglingDocs,但请注意,在PHP中它有许多特殊规则。但是在数组和对象之间,它非常直接。
答案 2 :(得分:1)
$key = array_search($v, get_object_vars($foo->items));
编辑:尝试this