private static function restorePhpSerializedData($deserialized)
{
$keysToRestore = [];
foreach ($deserialized as $key => $value) {
if (is_array($value)) {
$deserialized[$key] = self::restorePhpSerializedData($value);
} else {
if (Strings::startsWith($value, SerializedDataToIniConverter::SERIALIZED_MARKER)) {
$keysToRestore[] = $key;
}
}
}
foreach ($keysToRestore as $key) {
$relatedKeys = array_filter($deserialized, function ($maybeRelatedKey) use($key) {
return Strings::startsWith($maybeRelatedKey, $key);
}, ARRAY_FILTER_USE_KEY);
$keysToUnset = $relatedKeys;
// unset all related lines except the first one (it will be replaced without changing position in the array)
unset($keysToUnset[$key]);
$deserialized = array_diff_key($deserialized, $keysToUnset);
$deserialized[$key] = SerializedDataToIniConverter::fromIniLines($key, $relatedKeys);
}
return $deserialized;
}