繁体   English   中英

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

[英]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

CodePadhttp//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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM