如何在PHP中访问此数据的成员?

问题描述 投票:1回答:2

好的。现在我放弃了。我已经玩了好几个小时。

  • 我有一个变量名称$data
  • 变量包含以下内容:(使用var_export()提取) array ( 'headers' => array ( 'content-type' => 'multipart/alternative; boundary="_689e1a7d-7a0a-442a-bd6c-a1fb1dc2993e_"', ), 'ctype_parameters' => array ( 'boundary' => '_689e1a7d-7a0a-442a-bd6c-a1fb1dc2993e_', ), 'parts' => array ( 0 => stdClass::__set_state(array( 'headers' => array ( 'content-type' => 'text/plain; charset="iso-8859-1"', 'content-transfer-encoding' => 'quoted-printable', ), 'ctype_primary' => 'text', )), ), ) 我删除了一些非必要的数据。
  • 我想访问标题值(在上面的第二行) - simple:$data->headers
  • 我想访问标题值(在stdClass::之后的第十四行) - 怎么样?

我怎样才能访问stdClass::__set_state部分中的值?

我试过var_export($data->parts);,但我得到的只是

空值

php arrays members
2个回答
3
投票

这个变量是否以您发布的方式声明?喜欢:

$data = array(
          'headers' =>
             array (
             …

在那种情况下,我不太确定你如何通过q​​azxswpoi访问'headers'。它应该是$data->headers,因为它是一个数组,而不是一个对象。

再往下,$data['headers']静静地称之为stdClass::__set_state(array('headers' => …))类的方法__set_state。无论这种方法我不知道,但只有它的返回值将被分配给stdClass键。

如果OTOH你所展示的是'parts' => array(0 => ...)的结果,那么这是不正确的废话,因为var_dump($data)永远不会出现在stdClass::__set_state()中。在您的代码或您发布的内容中,有些东西是可疑的,如果没有看到更多内容,很难说。

无视上述情况,var_dump以这种时髦的方式打印课程。

var_export应该为第一个标题部分做。再往下,$data['headers']应该做的伎俩。


0
投票

我遇到了与开源邮件服务器$data['parts'][0]->headers类似的问题。在这种情况下,我使用API​​发送包含两个收件人的电子邮件。 API返回JSON,我想处理它以获取邮件已分配给每条消息的消息ID。根据print_r,JSON字符串解码为一系列嵌套对象。

Postal

从结构上看,前几层很容易提取。问题是messages对象具有为每个收件人电子邮件地址命名的属性。在不知道这些地址值的情况下,我无法以编程方式访问各个收件人对象以获取消息ID。

我还使用var_dump()和var_export()检查了这个对象。这就是我看到这种奇怪且误导性语法的地方:“stdClass :: __ set_state(array(”。)但是在这个对象中根本没有数组。实际上,这个结构只包含嵌套对象和属性。

在我提出正确的问题之前,这种情况让我感到满意:对象属性的名称是什么?

现在程序化解决方案相对容易,因为PHP具有相应的功能。我使用get_object_vars()来获取messages对象中的一组属性。通过简单地循环该数组,我就可以访问每个地址的id和token属性。这是代码,带有来自Postal的示例JSON响应。

pObj: stdClass Object
(
    [status] => success
    [time] => 0.28
    [flags] => stdClass Object
        (
        )

    [data] => stdClass Object
        (
            [message_id] => [email protected]
            [messages] => stdClass Object
                (
                    [[email protected]] => stdClass Object
                        (
                            [id] => 180
                            [token] => AblVpj6UW2wh
                        )

                    [[email protected]] => stdClass Object
                        (
                            [id] => 181
                            [token] => io5wgEXO1boH
                        )

                )

        )

)

使这一点变得困难的是,Postal设计在messages对象中使用了变量属性名称。我会将消息作为一个数组,并将电子邮件地址放入名为address的属性以及属性id和token。但事实就是如此,我希望这有助于其他人。

© www.soinside.com 2019 - 2024. All rights reserved.