【问题标题】:PHP: get a single key from objectPHP:从对象中获取单个键
【发布时间】:2010-08-05 03:16:31
【问题描述】:

我有一个具有单个键及其值的对象。但我不知道访问它的密钥。在不枚举对象的情况下获取密钥的最有效方法是什么?

【问题讨论】:

  • 那么你怎么知道你有正确的钥匙?
  • 您是否想做array_search
  • 我只有一个 json 对象像{"foo":3} 这样转换为 php,我需要同时使用键名和值。
  • 如果你自己解码 JSON,你可以把它解码成一个关联数组,让你的生活稍微轻松一些。 json_decode($json, true).
  • 问题是我真的无法改变解码模式。我带来的例子只是层次结构中的一个叶子。

标签: php object


【解决方案1】:

如果您只想访问值,则根本不需要密钥(实际上是属性名称):

$value = current((array)$object);

如果你真的想要属性名,试试这个:

$key = key((array)$object);

【讨论】:

  • 我有一组对象,每个对象都有一个属性,我不知道属性的名称。我正在使用foreach 循环遍历数组,对于每个对象,我想要键和值。我找到了这个解决方案,但它不是效率低下,因为您每次都将 $object 转换为数组吗? (对不起,如果它太基本了,但我是新手。非常感谢您的回答,因为我不确定使用它是否明智)..
  • 这个答案节省了我的时间。谢谢。
【解决方案2】:

您可以像这样将对象转换为数组:

$myarray = (array)$myobject;

然后,对于只有一个值的数组,这应该获取该值的键。

$value = key($myarray);

如果您愿意,您可以在一行中同时完成这两项操作。当然,您也可以通过枚举对象来做到这一点,就像您在问题中提到的那样。

要获取值而不是键,那么:

$value = current($myarray);

【讨论】:

    【解决方案3】:
    $array = array("foo" => "bar");
    
    $keys = array_keys($array);
    
    echo $keys[0];
    
    // Output: foo
    

    见:http://php.net/manual/en/function.array-keys.php

    【讨论】:

    • 这真的适用于对象吗? stdClass::__set_state(array( 'tag1' => 1, ))
    • @Michael:我错了,我以为您试图从数组中检索密钥。在这种情况下,您很可能希望将对象转换为数组。请参阅@thomasrutter 的示例:stackoverflow.com/questions/3411495/…
    • 我最初也被“key”这个词的使用误导了,这是一个数组术语......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多