可以在print_r的输出中看到变量,但是不确定如何在代码中访问它

问题描述

| 我用谷歌搜索,安装了Devel,Drupal for Firebug,但找不到。 我找到了我想要的东西,我知道它在哪里;我只是不知道如何得到它。 我将其放在代码括号中,但是Devel告诉我文件名(我想粘贴到.tpl.PHP文件中)在这里: field_image(Object)stdClass   处理程序(对象)views_handler_field_field     视图(对象)视图       结果(数组,2个元素)         0(对象)stdClass           _field_data(数组,1个元素)             nid(数组,2个元素)               实体(Object)stdClass                 field_image(数组,1个元素)                   und(Array,1 element)                     0(数组,11个元素)                       文件名(字符串,23个字符)FILENAME.jpg 那么,如何使用PHP输出该FILENAME.jpg?
<?PHP print $something->other; ?>
    

解决方法

        每当需要从变量中读取值时,就需要知道需要公式化哪个表达式才能访问该值。 对于一个简单的变量值,这很简单,您只需将变量名作为变量并通过在其前面加上
$
符号即可将其作为变量访问:
var_dump($variable);
在此处记录。 但是,这仅适用于简单数据类型,如
string
integer
。也有复合数据类型,即
array
object
。它们可以包含其他数据类型,无论是简单数据还是复合数据。您可以在PHP手册中学习如何访问数组的值以及如何从对象访问它们的值。我想您已经知道了一点,所以只需要在此处进行链接即可。 了解到这一点后,您可以将其组合起来。例如。如果对象中有一个数组,并且其中有一个想要获取的字符串,则需要将“ 1”号和变量名与所需的访问器,属性名和数组键结合使用。然后,您便获得了价值。您发布的数据表明您有一个包含其他对象和数组的对象,最后找到了变量名。 一些组合示例:
var_dump($variable->handler->view[0]->_field_data);
这是基于您上面提供的数据。以“ 9”开头,“ 10”用于访问需要随后命名的对象成员(例如变量名):“ 11”。正如您在调试输出中看到的那样,ѭ11是一个对象,您需要再次使用ѭ10来访问它的
view
成员。 现在ѭ14有所不同,因为它是一个数组。您可以通过使用
[]
并将键放在其中来访问数组的值。在我的示例中,键是数字
0
。由于该数组条目的值再次是一个对象,因此在下一步中,您需要再次使用
->
。 您可以继续该游戏,直到到达您感兴趣的元素为止。已经拥有的调试输出可帮助您编写返回值的表达式。可能是:
$field_image->handler->view->result[0]->_field_data[\'nid\'][\'entity\']->field_image[\'und\'][0][\'filename\']
但是我无法在我的系统上完全验证这一点。 但是,当发现问题时,使用ѭ20会很有帮助,因为您可以逐步扩展表达式直到找到元素。如果输入错误,您将立即看到。有时在
var_dump
语句后放置
die();
很有帮助,这样可以避免在包含很多其他数据的响应之前结束响应,这些其他数据将对您隐藏信息。 devel插件提供了额外的调试例程来转储突出的值。     ,        如果这是您的对象:
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
我猜您可以使用以下方法找到它:
field_image->handler->view->result[0]->_field_data[\'nid\'][entity]->field_image[\'und\'][0][\'filename]
在那里可能是一个错误,但一般的想法是:如果有对象,则使用
->
获取变量,如果有数组,则使用
[key]
。     ,        假设您在$ node中有一个node对象。您可以使用以下命令很好地打印它的值:
dpm($node); // remember this function is declared in devel module
然后,您可以查看来自$ node的信息,然后单击以展开内部字段。双击该字段,您可以看到它的php路径。 您会得到以下结果: 希望有帮助! PD:我想此功能在D6的dpm中不可用。     ,        尝试:
$field_image->handler->view->result[0]->_field_data[\'nid\'][\'entity\']->field_image[\'und\'][0][\'filename\']
    ,        如果您已安装devel并尝试
krumo ($variable);
请记住,默认情况下,只有管理员用户有权使用krumo命令,但这可以通过查看DEVEL角色权限来解决。 (不过,一旦完成操作,请不要忘记删除这些权限)     ,        
<? print_r($something[\"other\"]); ?>
(这是其他地方) 所以结果是“这个”     ,        我总结一下
print_r($data); => Traditional view of printing array.

var_dump($data); => Not so much cleaned view,gives you everything but in very suffocated manner

print \"<pre>\"; print_r($data); => A cleaned view but will not get   data types information.

dpm($data); => It gives you everything,but you need to have installed devel.
    ,您应该使用field_view_field($ entity_type,$ entity,$ field_name,$ display = array(),$ langcode = NULL),这将返回可渲染的array。您可以检查api文档https://api.drupal.org/api/drupal/modules%21field%21field.module/function/field_view_field/7.x     ,        如果由于某种原因而无法使用devel模块,则另一个有用的“调试”功能可能是var_export()和Drupal包装器drupal_var_export()。这些函数将输出作为PHP代码提供。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...