1){ $data = self::_updateNestedValueHelper($fieldNameArray, $data, $newValue, count($fieldNameArray)); return; } $data[$fieldNameArray[0]] = $value; } public static function createNestedArray(string $fieldName, $fieldValue): array { $temp = []; $fieldNameArray = explode('.', $fieldName); $fieldNameArrayReverse = array_reverse($fieldNameArray); foreach ($fieldNameArrayReverse as $index => $i) { if($index === 0){ $temp = array($i => $fieldValue); } else { $temp = array($i => $temp); } } return $temp; } public static function removeNestedField(array &$document, string $fieldToRemove){ if (array_key_exists($fieldToRemove, $document)) { unset($document[$fieldToRemove]); return; } // should be a nested array at this point $temp = &$document; $fieldNameArray = explode('.', $fieldToRemove); $fieldNameArrayCount = count($fieldNameArray); foreach ($fieldNameArray as $index => $i) { // last iteration if(($fieldNameArrayCount - 1) === $index){ if(is_array($temp) && array_key_exists($i, $temp)) { unset($temp[$i]); } break; } if(!is_array($temp) || !array_key_exists($i, $temp)){ break; } $temp = &$temp[$i]; } } /** * @param array $keysArray * @param $data * @param $newValue * @param int $originalKeySize * @return mixed */ private static function _updateNestedValueHelper(array $keysArray, $data, $newValue, int $originalKeySize) { if(empty($keysArray)){ return $newValue; } $currentKey = $keysArray[0]; $result = (is_array($data)) ? $data : []; if(!is_array($data) || !array_key_exists($currentKey, $data)){ $result[$currentKey] = self::_updateNestedValueHelper(array_slice($keysArray, 1), $data, $newValue, $originalKeySize); if(count($keysArray) !== $originalKeySize){ return $result; } } $result[$currentKey] = self::_updateNestedValueHelper(array_slice($keysArray, 1), $data[$currentKey], $newValue, $originalKeySize); return $result; } }