Как преобразовать двумерный массив в одномерный, объединяя ключи и значения каждого элемента?

Как можно объединить массивы с заданной структурой в один одномерный массив, где ключи формируются путём объединения исходных ключей через нижнее подчёркивание ("_"), а значениями являются объединённые значения (посредством "array_merge()"). Важно, чтобы алгоритм продолжал работать корректно при добавлении новых вложенных массивов такой же структуры или элементов в существующие массивы, сохраняя порядок элементов изначального массива.
  • 27 июня 2024 г. 14:22
Ответы на вопрос 2
Для преобразования двумерного массива в одномерный, объединяя ключи и значения каждого элемента, можно использовать следующий код на 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) =&gt; getCombinations(
          $arr,
          [ ...$keys, $k ],
          [ ...$vals, ...$n[$k] ]
        ),
        array_keys($n)
      ))
    : [ implode('_', $keys) =&gt; $vals ];
}</code></pre>
Похожие вопросы