Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php

/**
 * Work in progress! drupal_render() + CSS simple selectors = jackpot!
 * 
 * Allow $select string to work like CSS simple selectors in finding a specific
 * element key in deep array structures.
 */
function ren(&$element, $select = '') {
  if (strpos($select, ' ') !== FALSE) {
    $select_array = array();
    $sub_select = explode(' ', $select);
    
    for ($sub_element = $element; $sub_select != FALSE; next($sub_select)) {
      $select_array = array_merge($select_array, ns_find_element(current($sub_select), $sub_element));
    }
  }
  else {
    $select_array = ns_find_element($select, $element);
  }

  return $select_array;
}

/**
 * 
 */
function ns_find_element($find, $element, $path = array()) {

  if (is_array($element)) {
    foreach ($element as $element_key => $element_data) {
      if (strpos($element_key, '#') === 0) {
        continue;
      }
      if (is_array($element_data) && $inner_path = ns_find_element($find, $element_data, $path)) {
        $path = array_merge($path, array($element_key), $inner_path);
        return $path;
      }
      elseif ((string) $element_key === $find) {
        $path[] = $element_key;
        return $path;
      }
    }
  }

  return FALSE;
}