Browse Source

Avoiding loops for Hash::get() up to 3 levels

Lots of configs and read do not use very deep levels to read. Having the switch to avoid loops can increase the performance in about 30%.
Juan Basso 11 years ago
parent
commit
e3633b5d26
1 changed files with 15 additions and 6 deletions
  1. 15 6
      src/Utility/Hash.php

+ 15 - 6
src/Utility/Hash.php

@@ -57,12 +57,21 @@ class Hash {
 			$parts = $path;
 		}
 
-		foreach ($parts as $key) {
-			if (is_array($data) && isset($data[$key])) {
-				$data = $data[$key];
-			} else {
-				return $default;
-			}
+		switch (count($parts)) {
+			case 1:
+				return isset($data[$parts[0]]) ? $data[$parts[0]] : $default;
+			case 2:
+				return isset($data[$parts[0]][$parts[1]]) ? $data[$parts[0]][$parts[1]] : $default;
+			case 3:
+				return isset($data[$parts[0]][$parts[1]][$parts[2]]) ? $data[$parts[0]][$parts[1]][$parts[2]] : $default;
+			default:
+				foreach ($parts as $key) {
+					if (is_array($data) && isset($data[$key])) {
+						$data = $data[$key];
+					} else {
+						return $default;
+					}
+				}
 		}
 
 		return $data;