【问题标题】:Get property names from PHP stdClass从 PHP stdClass 获取属性名称
【发布时间】:2020-02-12 20:56:58
【问题描述】:

我有一个数组对象,看起来像:

$inDatabase = Array
(
    [0] => stdClass Object
        (
            [abc@gmail.com] => Array
                (
                )
        )
    [1] => stdClass Object
        (
            [xyz@gmail.com] => Array
                (
                )
        )
)

如何将电子邮件地址推送到新阵列?我尝试了以下方法:

$innerKeys =[];
$temp=[];
for($i=0;$i<2;$i++){
   $temp = array_keys($inDatabase[$i])

   //so I thought $temp[0] would have the email address but $temp is null.

   array_push($innerKeys,$temp[0]);

}

【问题讨论】:

  • 你为什么首先使用电子邮件地址作为属性名称?
  • 这能回答你的问题吗? PHP Print keys from an object?
  • 更简单,没有循环。

标签: php object


【解决方案1】:

array_keys() 用于数组。要将对象属性转换为数组,请使用get_object_vars()。所以你想要

$temp = array_keys(get_object_vars($inDatabase[$i]));

DEMO

【讨论】:

  • 这不会产生任何输出。 print_r($temp) 为空白
  • 我打错了数组名,你抄错了吗?
  • 顺便说一句,你为什么不用foreach
【解决方案2】:

您可以使用array_reduce()get_object_vars()array_keys()

$emails = array_reduce($inDatabase, function ($arr, $obj) {
    return array_merge($arr, array_keys(get_object_vars($obj)));
}, []);

工作示例:https://3v4l.org/IU3C9

【讨论】:

    【解决方案3】:

    您也可以只转换为数组并获取第一个键。我稍微修改了一下:

    foreach($inDatabase as $o) {
       $innerKeys[] = array_keys((array)$o)[0];
    }
    

    但是,由于您想要第一个,key(令人惊讶)将在一个对象上工作:

    foreach($inDatabase as $o) {
       $innerKeys[] = key($o);
    }
    

    或者更简单:

    $innerKeys = array_map('key', $inDatabase);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2011-07-27
      • 2021-12-04
      • 2014-03-06
      • 2012-01-08
      相关资源
      最近更新 更多