4

我有这样的课:

stdClass Object
(
    [id] => 1
    [items] => stdClass Object
        (
            [0] => 123
            [1] => 234
            [2] => 345
            [3] => 456
        )
    )
)

让我们调用上面的对象$foo

比方说$v = 234。给定$fooand $v,我怎样才能返回“key” 1

如果$foo->items是一个数组,我会简单地做$key = array_search($v,$foo->items);。但这在对象中不起作用。

如何在$v不循环某些对象的情况下找到密钥foreach

4

3 回答 3

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

键盘:http : //codepad.org/in4w94nG

于 2012-09-20T19:00:05.980 回答
2

正如您在示例中所示,您正在处理stdClass对象。这些与数组非常相似,使用 PHP,您可以使用称为 cast 的东西轻松地在这两者之间进行转换

$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 中这有许多特殊规则。但是在数组和对象之间,它非常简单。

于 2012-09-21T21:55:29.457 回答
1

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

编辑:试试这个

于 2012-09-20T19:03:10.207 回答