r3018 - peekNode(): new function to complement pokeNode()
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 30 Jul 2009 13:14:46 +0000 (13:14 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 30 Jul 2009 13:14:46 +0000 (13:14 +0000)
inc/functions.php

index ce97454dfc3118f70b0027ed47c0e60f2d98405b..6859879d0fea953a7d5a03ead342cc7177545e8d 100644 (file)
@@ -871,6 +871,26 @@ function pokeNode (&$tree, $trace, $key, $value, $threshold = 0)
        }
 }
 
+// Likewise traverse the tree with the trace and return the final node.
+function peekNode ($tree, $trace, $target_id)
+{
+       $self = __FUNCTION__;
+       if (NULL === ($next = array_shift ($trace))) // warm
+       {
+               foreach ($tree as $node)
+                       if ($node['id'] == $target_id) // hot
+                               return $node;
+       }
+       else // cold
+       {
+               foreach ($tree as $node)
+                       if ($node['id'] == $next) // warmer
+                               return $self ($node['kids'], $trace, $target_id);
+       }
+       // HCF
+       return NULL;
+}
+
 // Build a tree from the item list and return it. Input and output data is
 // indexed by item id (nested items in output are recursively stored in 'kids'
 // key, which is in turn indexed by id. Functions, which are ready to handle