private function getAllChildKeys($data, $maps, $parent_keys, $parent_types, & $result, & $keys, $current_key = [], $current_type = null) {
		if ($current_type == '11') {
			$data = ['__11__' => $data];
		}
		foreach ($data as $k => $v) {
			$new_key = $current_key;
			if ($current_type != '11') {
				$new_key[] = $k;
			}
			if (count($parent_keys) == 1) {
				$new_key[] = $parent_keys[0];
				// put values into result
				$result[] = $new_key;
				// generate keys
				$temp = [];
				foreach ($maps[0] as $k3 => $v3) {
					$temp[] = $v[$k3];
				}
				// we need to preserve a data type if its just one column key
				if (count($temp) == 1) {
					$keys[] = $temp[0];
				} else {
					$keys[] = implode('::', $temp);
				}
			} else {
				// remove extra level
				$parent_keys_temp = $parent_keys;
				$v2 = array_shift($parent_keys_temp);
				$parent_types_temp = $parent_types;
				array_shift($parent_types_temp);
				$maps_temp = $maps;
				array_shift($maps_temp);
				// generate key
				$new_key[] = $v2;
				$this->getAllChildKeys($v[$v2], $maps_temp, $parent_keys_temp, $parent_types_temp, $result, $keys, $new_key, $parent_types[0]);
			}
		}
	}
private function getAllChildKeys($data, $maps, $parent_keys, $parent_types, & $result, & $keys, $current_key = [], $current_type = null) {
		if ($current_type == '11') {
			$data = ['__11__' => $data];
		}
		foreach ($data as $k => $v) {
			$new_key = $current_key;
			if ($current_type != '11') {
				$new_key[] = $k;
			}
			if (count($parent_keys) == 1) {
				$new_key[] = $parent_keys[0];
				// put values into result
				$result[] = $new_key;
				// generate keys
				$temp = [];
				foreach ($maps[0] as $k3 => $v3) {
					$temp[] = $v[$k3];
				}
				// we need to preserve a data type if its just one column key
				if (count($temp) == 1) {
					$keys[] = $temp[0];
				} else {
					$keys[] = implode('::', $temp);
				}
			} else {
				// remove extra level
				$parent_keys_temp = $parent_keys;
				$v2 = array_shift($parent_keys_temp);
				$parent_types_temp = $parent_types;
				array_shift($parent_types_temp);
				$maps_temp = $maps;
				array_shift($maps_temp);
				// generate key
				$new_key[] = $v2;
				$this->getAllChildKeys($v[$v2], $maps_temp, $parent_keys_temp, $parent_types_temp, $result, $keys, $new_key, $parent_types[0]);
			}
		}
	}
private function getAllChildKeys ( $ data , $ maps , $ parent_keys , $ parent_types , & $ result , & $ keys , $ current_key = [ ] , $ current_type = null ) { if ( $ current_type == '11' ) { $ data = [ '__11__' => $ data ] ; } foreach ( $ data as $ k => $ v ) { $ new_key = $ current_key ; if ( $ current_type != '11' ) { $ new_key [ ] = $ k ; } if ( count ( $ parent_keys ) == 1 ) { $ new_key [ ] = $ parent_keys [ 0 ] ; // put values into result $ result [ ] = $ new_key ; // generate keys $ temp = [ ] ; foreach ( $ maps [ 0 ] as $ k3 => $ v3 ) { $ temp [ ] = $ v [ $ k3 ] ; } // we need to preserve a data type if its just one column key if ( count ( $ temp ) == 1 ) { $ keys [ ] = $ temp [ 0 ] ; } else { $ keys [ ] = implode ( '::' , $ temp ) ; } } else { // remove extra level $ parent_keys_temp = $ parent_keys ; $ v2 = array_shift ( $ parent_keys_temp ) ; $ parent_types_temp = $ parent_types ; array_shift ( $ parent_types_temp ) ; $ maps_temp = $ maps ; array_shift ( $ maps_temp ) ; // generate key $ new_key [ ] = $ v2 ; $ this -> getAllChildKeys ( $ v [ $ v2 ] , $ maps_temp , $ parent_keys_temp , $ parent_types_temp , $ result , $ keys , $ new_key , $ parent_types [ 0 ] ) ; } } }
Get all child keys

@param array $data
@param array $maps
@param array $parent_keys
@param array $parent_types
@param array $result
@param array $keys
@param array $current_key
@param string $current_type
Get all child keys