Метод 1: использование рекурсивной функции
function unflattenArray($array) {
$result = array();
foreach ($array as $key => $value) {
$keys = explode('.', $key);
$currentArray = &$result;
foreach ($keys as $nestedKey) {
if (!isset($currentArray[$nestedKey])) {
$currentArray[$nestedKey] = array();
}
$currentArray = &$currentArray[$nestedKey];
}
$currentArray = $value;
}
return $result;
}
// Example usage
$flattenedArray = array(
'person.name' => 'John Doe',
'person.age' => 30,
'person.address.city' => 'New York',
'person.address.country' => 'USA'
);
$unflattenedArray = unflattenArray($flattenedArray);
print_r($unflattenedArray);
Метод 2: использование цикла
function unflattenArray($array) {
$result = array();
foreach ($array as $key => $value) {
$keys = explode('.', $key);
$currentArray = &$result;
foreach ($keys as $nestedKey) {
if (!isset($currentArray[$nestedKey])) {
$currentArray[$nestedKey] = array();
}
$currentArray = &$currentArray[$nestedKey];
}
$currentArray = $value;
}
return $result;
}
// Example usage
$flattenedArray = array(
'person.name' => 'John Doe',
'person.age' => 30,
'person.address.city' => 'New York',
'person.address.country' => 'USA'
);
$unflattenedArray = unflattenArray($flattenedArray);
print_r($unflattenedArray);
Метод 3: использование библиотеки (например, компонента Symfony PropertyAccess)
use Symfony\Component\PropertyAccess\PropertyAccess;
function unflattenArray($array) {
$result = array();
$accessor = PropertyAccess::createPropertyAccessor();
foreach ($array as $key => $value) {
$accessor->setValue($result, $key, $value);
}
return $result;
}
// Example usage
$flattenedArray = array(
'person.name' => 'John Doe',
'person.age' => 30,
'person.address.city' => 'New York',
'person.address.country' => 'USA'
);
$unflattenedArray = unflattenArray($flattenedArray);
print_r($unflattenedArray);