Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Able to see a variable in print_r()'s output, but not sure how to access it in code

I googled, installed Devel, Drupal for Firebug, but I can't find it.

I found what I want, I know where it is; I just don't know how to get it.

I'll put this in code brackets, but Devel tells me the file name (which I want to stick into the .tpl.php file) is here:

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

So, how do I get that FILENAME.jpg to be output using PHP?

<?php print $something->other; ?>
like image 720
Dirk v B Avatar asked Jun 12 '11 13:06

Dirk v B


People also ask

What is output of Print_r function?

It is a built-in function in print_r in PHP that is used to print or display the contents of a variable. It essentially prints human-readable data about a variable. The value of the variable will be printed if it is a string, integer, or float.

What does Print_r mean in PHP?

Definition and Usage The print_r() function prints the information about a variable in a more human-readable way.

What is the difference between Print_r and Var_dump?

var_dump() displays values along with data types as output. print_r() displays only value as output. It does not have any return type. It will return a value that is in string format.


2 Answers

Whenever you need to read a value out of a variable, you need to know which expression you need to formulate to access that value.

For a simple variable value this is simple, you just take the variable name and access it as a variable by prefixing it with the $ sign:

var_dump($variable);

This is documented here.

However this does only work for simple datatypes like string or integer. There are as well compound datatypes, namely array and object. They can contain further datatypes, be it simple or compound. You can learn in the PHP manual how to access the values of an array and how you can access them from an object. I think you already know of that a bit, so just for having it linked here.

When you have learned about that, you can then combine this. E.g. if there is an array within an object and therein is a string you would like to get, you need to combine the $ sign and the variable name with the needed accessors, property names and array keys. Then you get your value. The data you have posted shows that you have an object that has some other objects and arrays and in the end you find the variable name.

Some combination example:

var_dump($variable->handler->view[0]->_field_data);

This is based on the data you've provided above. $variable is where you start, -> is used to access object members which need to be named then (like a name for a variable) : handler. As you've seen in your debug output that handler is an object, you need to use again the -> to access the view member of it.

Now view is different because it's an array. You access values of an array by using [] and putting the key in there. The key in my example is a number, 0. And as the value of that array entry is an object again, in the next step you need to use -> again.

You can continue this game until you reach the element that you're interested in. The debug output you already have helps you to write the expression that returns the value. Possibly it is:

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

But I can not validate that here on my system in full.

However when finding things out, it's helpful to make use of var_dump as you could step by step extend the expression until you find the element. If you make an error you will immediately see. Sometimes it helps to place a die(); after the var_dump statement so not to end the response before it contains to much other data that will hide the information from you. The devel plugin offers additional debug routines to dump values prominent.

like image 76
hakre Avatar answered Oct 05 '22 22:10

hakre


If this is your object:

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

I'd guess you can find it using:

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

Could be a mistake in there, but the general Idea is: if you have an object, get the variable using ->, and if you have an array, use [key].

like image 22
Nanne Avatar answered Oct 05 '22 22:10

Nanne