Get node values from array with Drupal API? With Drupal API I found you can get the values of a node with noad_load like so:

$thisnode = node_load($nid = $child2, $vid = NULL, $reset = FALSE);


Now it is easy to echo the title in this way

$thisnode-&gt;title;


But the array begins to get quite complex when I try and get data from the custom image_thumbnail field because it is array within array. See the full printed array for one node:

stdClass Object ( [vid] =&gt; 4 [uid] =&gt; 1 [title] =&gt; Who we are [log] =&gt; [status] =&gt; 1 [comment] =&gt; 0 [promote] =&gt; 0 [sticky] =&gt; 0 [nid] =&gt; 4 [type] =&gt; level_2 [language] =&gt; und [created] =&gt; 1345561152 [changed] =&gt; 1346982536 [tnid] =&gt; 0 [translate] =&gt; 0 [revision_timestamp] =&gt; 1346982536 [revision_uid] =&gt; 1 [body] =&gt; Array ( [und] =&gt; Array ( [0] =&gt; Array ( [value] =&gt; blah blah blah [summary] =&gt; [format] =&gt; plain_text [safe_value] =&gt; 

blah blah blah
 [safe_summary] =&gt; ) ) ) [field_parent2] =&gt; Array ( [und] =&gt; Array ( [0] =&gt; Array ( [target_id] =&gt; 2 ) ) ) [field_level2_thumbnail_image] =&gt; Array ( [und] =&gt; Array ( [0] =&gt; Array ( [fid] =&gt; 4 [alt] =&gt; this is a photo [title] =&gt; this is a photo [width] =&gt; 308 [height] =&gt; 198 [uid] =&gt; 1 [filename] =&gt; article-image.png [uri] =&gt; public://article-image.png [filemime] =&gt; image/png [filesize] =&gt; 105660 [status] =&gt; 1 [timestamp] =&gt; 1346982536 [rdf_mapping] =&gt; Array ( ) ) ) ) [rdf_mapping] =&gt; Array ( [rdftype] =&gt; Array ( [0] =&gt; sioc:Item [1] =&gt; foaf:Document ) [title] =&gt; Array ( [predicates] =&gt; Array ( [0] =&gt; dc:title ) ) [created] =&gt; Array ( [predicates] =&gt; Array ( [0] =&gt; dc:date [1] =&gt; dc:created ) [datatype] =&gt; xsd:dateTime [callback] =&gt; date_iso8601 ) [changed] =&gt; Array ( [predicates] =&gt; Array ( [0] =&gt; dc:modified ) [datatype] =&gt; xsd:dateTime [callback] =&gt; date_iso8601 ) [body] =&gt; Array ( [predicates] =&gt; Array ( [0] =&gt; content:encoded ) ) [uid] =&gt; Array ( [predicates] =&gt; Array ( [0] =&gt; sioc:has_creator ) [type] =&gt; rel ) [name] =&gt; Array ( [predicates] =&gt; Array ( [0] =&gt; foaf:name ) ) [comment_count] =&gt; Array ( [predicates] =&gt; Array ( [0] =&gt; sioc:num_replies ) [datatype] =&gt; xsd:integer ) [last_activity] =&gt; Array ( [predicates] =&gt; Array ( [0] =&gt; sioc:last_activity_date ) [datatype] =&gt; xsd:dateTime [callback] =&gt; date_iso8601 ) ) [name] =&gt; slawrence10 [picture] =&gt; 0 [data] =&gt; b:0; )


What's the best way to extract for example alt from *field_level2_thumbnail_image*?

I can do it like so:

$thisnode-&gt;field_level2_thumbnail_image['und'][0]['alt'];


But is this stable? Will 'und' always be 0? Am I missing something here?
If it is for page view of some kind, I think you can maybe try for this more robust way of getting at field values:

$output = field_view_field('node', $node, 'field_name');


An important trick that shows one of the ways to deal with field data properly. Initially  learned a while back off this site.

Another method of getting at the data I just thought of and use quite a bit in a recent project is entity api. Highly recommended add-on.
Consider the following borrowed snippet that shows how to deal with mail field. Other fields are the same.

   $wrapper = entity_metadata_wrapper('node', $node);
   $wrapper-&gt;author-&gt;mail-&gt;value();

To update the user's mail address one could use

   $wrapper-&gt;author-&gt;mail-&gt;set('stefp@example.com');

   or

   $wrapper-&gt;author-&gt;mail = 'stef@example.com';


Last but not least, there are still yet other alternatives surely?

Best practice for language key for &quot;und&quot; in hook_form_alter.  I did not flag as duplicate as I did not check into detail if other question was detailed or not, but it should be enough to give you ideas.

Good-luck.