Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 能够在print_r()和#x27;s输出,但不确定如何在代码中访问它_Php_Drupal_Drupal 7 - Fatal编程技术网

Php 能够在print_r()和#x27;s输出,但不确定如何在代码中访问它

Php 能够在print_r()和#x27;s输出,但不确定如何在代码中访问它,php,drupal,drupal-7,Php,Drupal,Drupal 7,我在谷歌上搜索,安装了Devel,为Firebug安装了Drupal,但我找不到它 我找到了我想要的,我知道它在哪里;我只是不知道如何得到它 我将把它放在代码括号中,但Devel告诉我文件名(我想将其放在.tpl.php文件中)如下: 字段\图像(对象)stdClass 处理程序(对象)视图\u处理程序\u字段\u字段 视图(对象)视图 结果(数组,2个元素) 0(对象)stdClass _字段_数据(数组,1个元素) nid(数组,2个元素) 实体(对象)stdClass 字段图像(数组,1个

我在谷歌上搜索,安装了Devel,为Firebug安装了Drupal,但我找不到它

我找到了我想要的,我知道它在哪里;我只是不知道如何得到它

我将把它放在代码括号中,但Devel告诉我文件名(我想将其放在.tpl.php文件中)如下:

字段\图像(对象)stdClass 处理程序(对象)视图\u处理程序\u字段\u字段 视图(对象)视图 结果(数组,2个元素) 0(对象)stdClass _字段_数据(数组,1个元素) nid(数组,2个元素) 实体(对象)stdClass 字段图像(数组,1个元素) und(数组,1个元素) 0(数组,11个元素) 文件名(字符串,23个字符)filename.jpg 那么,如何使用PHP输出FILENAME.jpg呢

<?php print $something->other; ?>

每当您需要从变量中读取值时,都需要知道需要使用哪个表达式才能访问该值

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

var_dump($variable);
这个

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

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

一些组合示例:

var_dump($variable->handler->view[0]->_field_data);
这是基于您上面提供的数据
$variable
是您的起点,
->
用于访问需要命名的对象成员(如变量名称):
处理程序
。正如您在调试输出中看到的那样,
处理程序
是一个对象,您需要再次使用
->
来访问它的
视图
成员

现在,视图是不同的,因为它是一个数组。您可以通过使用
[]
并将键放在数组中来访问数组的值。我的示例中的键是一个数字,
0
。由于该数组项的值又是一个对象,因此在下一步中,您需要再次使用
->

您可以继续此游戏,直到达到您感兴趣的元素。您已有的调试输出可帮助您编写返回值的表达式。可能是:

$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']
但我无法在我的系统上完全验证这一点


但是,当发现问题时,使用
var\u dump
会很有帮助,因为您可以逐步扩展表达式,直到找到元素为止。如果你犯了错误,你会立即看到。有时放置一个
die()
var_dump
语句之后,因此不要在响应包含许多其他数据之前结束响应,这些数据会对您隐藏信息。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]
尝试:

$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']

如果已安装devel,请重试

krumo ($variable);
请记住,默认情况下,只有管理员用户才有权使用krumo命令,但这可以通过查看DEVEL角色权限来解决。(但不要忘记在完成后删除这些权限)


(这是另一个)
所以结果是“this”

假设在$node中有一个node对象。您可以通过以下方式很好地打印其值:

dpm($node); // remember this function is declared in devel module
然后,您可以查看$node中的信息,并单击展开内部字段。双击该字段,您可以看到它的php路径

您将得到以下结果:

希望有帮助

PD:我想这项功能在D6的dpm上不可用。

让我总结一下

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.
打印($data);=>打印阵列的传统视图。
变量转储($data);=>没有太多干净的风景,给你一切,但在非常令人窒息的方式
打印“”;打印($data);=>已清理视图,但不会获取数据类型信息。
dpm($data);=>它为您提供了一切,但您需要安装devel。

您应该使用field\u view\u field($entity\u type,$entity,$field\u name,$display=array(),$langcode=NULL)返回可渲染数组。您可以查看api文档

如果出于某种原因无法使用devel模块,另一个有用的“调试”函数可以是和Drupal包装器。这些函数以PHP代码的形式提供输出。

由于OP安装了Devel,他可以使用其调试功能,包括
dsm()
。数组和对象不“包含”数据类型。@Tomalak Geret'kal:变量也不“包含”值,但我想说定义
数据类型。定义
包含
。然后我们可以热情地详细讨论这一点;)区别在于,从语义上讲,变量肯定包含值,但除了语言和程序上下文之外,没有任何内容包含数据类型。不过,我要说的是:我非常感谢你的精心回答!我所需要的只是“看着它完成”,但我想如果以后我搞砸了,我可以去读这篇文章;)为隐藏的“TLDR”道歉,很明显
dpm($node); // remember this function is declared in devel module
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.