summaryrefslogtreecommitdiff
path: root/framework/Util/TDataFieldAccessor.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Util/TDataFieldAccessor.php')
-rw-r--r--framework/Util/TDataFieldAccessor.php15
1 files changed, 12 insertions, 3 deletions
diff --git a/framework/Util/TDataFieldAccessor.php b/framework/Util/TDataFieldAccessor.php
index b96cf0c9..24fcbd36 100644
--- a/framework/Util/TDataFieldAccessor.php
+++ b/framework/Util/TDataFieldAccessor.php
@@ -35,7 +35,9 @@ class TDataFieldAccessor
/**
* Evaluates the data value at the specified field.
* - If the data is an array, then the field is treated as an array index
- * and the corresponding element value is returned;
+ * and the corresponding element value is returned; the field name can also include
+ * dots to access subarrays. For example a field named 'MyField.MySubField' will
+ * first try to access $data['MyField.MySubField'], then try $data['MyField']['MySubField'].
* - If the data is a TMap or TList object, then the field is treated as a key
* into the map or list, and the corresponding value is returned.
* - If the data is an object, the field is treated as a property or sub-property
@@ -53,7 +55,15 @@ class TDataFieldAccessor
try
{
if(is_array($data) || ($data instanceof ArrayAccess))
- return $data[$field];
+ {
+ if(isset($data[$field]))
+ return $data[$field];
+
+ $tmp = $data;
+ foreach (explode(".", $field) as $f)
+ $tmp = $tmp[$f];
+ return $tmp;
+ }
else if(is_object($data))
{
if(strpos($field,'.')===false) // simple field
@@ -79,4 +89,3 @@ class TDataFieldAccessor
throw new TInvalidDataValueException('datafieldaccessor_data_invalid',$field);
}
}
-