private static function _addArray($lineArray, $indent) { $key = key($lineArray); $val = isset($lineArray[$key]) ? $lineArray[$key] : NULL; if ($key === '__SPICYZERO__') { $key = '0'; } if ($indent === 0 && !self::$groupAlias && !self::$groupAnchor) { if ($key || $key === '' || $key === '0') { self::$result[$key] = $val; } else { self::$result[] = $val; end(self::$result); $key = key(self::$result); } self::$path[$indent] = $key; return; } $history[] = $_arr = self::$result; foreach (self::$path as $path) { $history[] = $_arr = $_arr[$path]; } if (self::$groupAlias) { if (!isset(self::$savedGroups[self::$groupAlias])) { throw new LogicException('Bad group name:' . self::$groupAlias . '.'); } $val = self::$result; foreach (self::$savedGroups[self::$groupAlias] as $g) { $val = $val[$g]; } self::$groupAlias = FALSE; } if ((string) $key === $key && $key === '<<') { $_arr = is_array($_arr) ? array_merge($_arr, $val) : $val; } else { if ($key || $key === '' || $key === '0') { if (!is_array($_arr)) { $_arr = array($key => $val); } else { $_arr[$key] = $val; } } else { if (!is_array($_arr)) { $_arr = array($val); $key = 0; } else { $_arr[] = $val; end($_arr); $key = key($_arr); } } } $reversePath = array_reverse(self::$path); $reverseHistory = array_reverse($history); $reverseHistory[0] = $_arr; $count = count($reverseHistory) - 1; for ($i = 0; $i < $count; ++$i) { $reverseHistory[$i + 1][$reversePath[$i]] = $reverseHistory[$i]; } self::$result = $reverseHistory[$count]; self::$path[$indent] = $key; if (self::$groupAnchor) { self::$savedGroups[self::$groupAnchor] = self::$path; if (is_array($val)) { $k = key($val); if ((int) $k !== $k) { self::$savedGroups[self::$groupAnchor][$indent + 2] = $k; } } self::$groupAnchor = FALSE; } }