如何从值中获取对象“键”?是否有类似于对象的array_search?

时间:2012-09-20 18:59:00

标签: php arrays object key

我有一个类似的课程:

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的密钥?

3 个答案:

答案 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 Juggling­Docs,但请注意,在PHP中它有许多特殊规则。但是在数组和对象之间,它非常直接。

答案 2 :(得分:1)

$key = array_search($v, get_object_vars($foo->items));

编辑:尝试this