能够在print_r()的输出中看到变量,但不知道如何在代码中访问它

Dir*_*v B 15 php drupal drupal-7

我用Google搜索,安装了Devel,Drupal for Firebug,但我找不到它.

我发现我想要的东西,我知道它在哪里 ; 我只是不知道如何得到它.

我将它放在代码括号中,但是Devel告诉我文件名(我想要粘贴到.tpl.php文件中)在这里:

field_image (Object) stdClass 
  handler (Object) views_handler_field_field 
    view (Object) view 
      result (Array, 2 elements) 
        0 (Object) stdClass 
          _field_data (Array, 1 element) 
            nid (Array, 2 elements) 
              entity (Object) stdClass
                field_image (Array, 1 element) 
                  und (Array, 1 element)
                    0 (Array, 11 elements)                                      
                      filename (String, 23 characters ) FILENAME.jpg

那么,我如何使用PHP输出FILENAME.jpg?

<?php print $something->other; ?>
Run Code Online (Sandbox Code Playgroud)

hak*_*kre 17

每当您需要从变量中读取值时,您需要知道需要制定哪个表达式来访问该值.

对于一个简单的变量值,这很简单,您只需获取变量名称并通过在其前面加上$符号来将其作为变量访问:

var_dump($variable);
Run Code Online (Sandbox Code Playgroud)

在此处记录.

但是,这仅适用于像string或的简单数据类型integer.还有复合数据类型,即arrayobject.它们可以包含更多数据类型,无论是简单还是复合.您可以在PHP手册中学习如何访问数组的值以及如何从对象访问它们.我想你已经知道了一点,所以只是把它链接在这里.

当你了解到这一点后,你就可以将它结合起来.例如,如果对象中有一个数组,并且其中有一个您想要获得的字符串,则需要将$符号和变量名称与所需的访问器,属性名称和数组键组合在一起.然后你就得到了你的价值.您发布的数据显示您有一个具有其他对象和数组的对象,最后您会找到变量名称.

一些组合示例:

var_dump($variable->handler->view[0]->_field_data);
Run Code Online (Sandbox Code Playgroud)

这是基于您在上面提供的数据.$variable就是你开始,->用于访问需要被命名然后(例如,一个名称为变量)对象的成员:handler.正如您在调试输出中看到的那样handler,您需要再次使用它->来访问view它的成员.

现在view不同了,因为它是一个数组.您可以通过使用[]并将密钥放在那里来访问数组的值.我的例子中的关键是数字,0.并且由于该数组条目的值再次成为对象,因此在下一步中您需要->再次使用.

你可以继续这个游戏,直到你到达你感兴趣的元素.你已经拥有的调试输出可以帮助你编写返回值的表达式.可能是:

$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']
Run Code Online (Sandbox Code Playgroud)

但是我无法在我的系统上完整地验证这一点.

然而,当找到问题时,使用它是有帮助的,var_dump因为您可以逐步扩展表达式,直到找到元素.如果你犯了错误,你会立即看到.有时,die();var_dump声明之后放置一个声明是有帮助的,以便在它包含许多其他数据之前不会结束响应,这些数据会隐藏您的信息.devel插件提供了额外的调试例程来转储突出显示的值.


Nan*_*nne 6

如果这是你的对象:

field_image (Object) stdClass 
  handler (Object) views_handler_field_field 
    view (Object) view 
      result (Array, 2 elements) 
        0 (Object) stdClass 
          _field_data (Array, 1 element) 
            nid (Array, 2 elements) 
              entity (Object) stdClass
                field_image (Array, 1 element) 
                  und (Array, 1 element)
                    0 (Array, 11 elements)                                      
                      filename (String, 23 characters ) FILENAME.jpg
Run Code Online (Sandbox Code Playgroud)

我猜你可以用它来找到它:

field_image->handler->view->result[0]->_field_data['nid'][entity]->field_image['und'][0]['filename]
Run Code Online (Sandbox Code Playgroud)

可能是一个错误,但一般的想法是:如果你有一个对象,使用变量->,如果你有一个数组,使用[key].