}
}
+ /**
+ * Get a single value from an array-tre.
+ *
+ * @param array $arr
+ * Ex: array('foo'=>array('bar'=>123)).
+ * @param array $pathParts
+ * Ex: array('foo',bar').
+ * @return mixed|NULL
+ * Ex 123.
+ */
+ public static function pathGet($arr, $pathParts) {
+ $r = $arr;
+ foreach ($pathParts as $part) {
+ if (!isset($r[$part])) {
+ return NULL;
+ }
+ $r = $r[$part];
+ }
+ return $r;
+ }
+
+ /**
+ * Set a single value in an array tree.
+ *
+ * @param array $arr
+ * Ex: array('foo'=>array('bar'=>123)).
+ * @param array $pathParts
+ * Ex: array('foo',bar').
+ * @param $value
+ * Ex: 456.
+ */
+ public static function pathSet(&$arr, $pathParts, $value) {
+ $r = &$arr;
+ $last = array_pop($pathParts);
+ foreach ($pathParts as $part) {
+ if (!isset($r[$part])) {
+ $r[$part] = array();
+ }
+ $r = &$r[$part];
+ }
+ $r[$last] = $value;
+ }
+
}