Как можно объединить массивы с заданной структурой в один одномерный массив, где ключи формируются путём объединения исходных ключей через нижнее подчёркивание ("_"), а значениями являются объединённые значения (посредством "array_merge()"). Важно, чтобы алгоритм продолжал работать корректно при добавлении новых вложенных массивов такой же структуры или элементов в существующие массивы, сохраняя порядок элементов изначального массива.
Для преобразования двумерного массива в одномерный, объединяя ключи и значения каждого элемента, можно использовать следующий код на PHP:
```php
function flattenArray($array, $prefix = '') {
$result = [];
foreach ($array as $key => $value) {
if (is_array($value)) {
$result = array_merge($result, flattenArray($value, $prefix . $key . '_'));
} else {
$result[$prefix . $key] = $value;
}
}
return $result;
}
$twoDimensionalArray = [
'key1' => 'value1',
'key2' => [
'key3' => 'value3',
'key4' => 'value4'
]
];
$flattenedArray = flattenArray($twoDimensionalArray);
print_r($flattenedArray);
```
Пример выше преобразует такой массив:
```php
[
'key1' => 'value1',
'key2' => [
'key3' => 'value3',
'key4' => 'value4'
]
]
```
в такой одномерный массив:
```php
[
'key1' => 'value1',
'key2_key3' => 'value3',
'key2_key4' => 'value4'
]
```
Этот подход сохраняет порядок элементов исходного массива при преобразовании.
<pre><code class="php">function getCombinations($arr, $keys = [], $vals = []) {
return ($n = $arr[count($keys)] ?? null)
? array_merge(...array_map(
fn($k) => getCombinations(
$arr,
[ ...$keys, $k ],
[ ...$vals, ...$n[$k] ]
),
array_keys($n)
))
: [ implode('_', $keys) => $vals ];
}</code></pre>