Php 将多维数组另存为";“平坦”;使用数组键和值

Php 将多维数组另存为";“平坦”;使用数组键和值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我得到了一个多维数组,它的X个数是。。。。尺寸? 我的阵列示例: Array ( [system] => Array ( [step_x_y] => Array ( [0] => Schnitt %1 von %2 [1] => Trin %1 af %2 [2] => Step %1 of %2 )

我得到了一个多维数组,它的X个数是。。。。尺寸? 我的阵列示例:

Array
(
[system] => Array
    (
        [step_x_y] => Array
            (
                [0] => Schnitt %1 von %2
                [1] => Trin %1 af %2
                [2] => Step %1 of %2
            )

        [type] => Array
            (
                [0] => Typ
                [1] => Type
                [2] => Type
            )

        [next_button] => Array
            (
                [0] => Aktualisieren
                [1] => Opdater
                [2] => Update
            )
[account.php] => Array
    (
        [h1] => Array
            (
                [0] => Kontoeinstellungen
                [1] => Konto Indstillinger
                [2] => Account Settings
            )

        [fields_required] => Array
            (
                [0] => Alle Felder, außer die Geschäftsinformation, müssen ausgefüllt werden
                [1] => Alle felter er obligatoriske, dog ikke virksomhedsinfo
                [2] => All fields required
            )
[mounting] => Array
    (
        [no] => Array
            (
                [text] => Array
                    (
                        [0] => Keine
                        [1] => Ingen
                        [2] => Nothing
                    )

                [more_text] => Array
                    (
                        [0] => Keine Befestigung
                        [1] => Ingen befæstelser
                        [2] => No mounting
                    )

            )

        [CFL] => Array
            (
                [text] => Array
                    (
                        [0] => Frontflansch (CLF)
                        [1] => Front Flange
                        [2] => Front Flange
                    )

                [more_text] => Array
                    (
                        [0] => Frontflansch zum Schweißen an dem Zylinderrohr
                        [1] => Front flange til påsvejsning på cylinder rør
                        [2] => Front Flange to be welded on cylinder tube
                    )

            ) ....
我正在尝试将该数组转换为这种“平面”格式: (#后面的数组键也必须包括在内)

我使用此代码输出所有值,每行一个值:

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($merged_array));
foreach($it as $v) {
  echo $v, "<br>";    
}
希望你们中的一位能够帮助我:)

更新:

我按照建议更改了一些代码:

foreach ($it as $k => $v) {

  if($k == 0)
    $cc = '<br>(DE)';
  elseif($k == 1)
    $cc = '(DK)';
  elseif($k == 2)
    $cc = '(EN)';
  else
    $cc = '-';

  echo $cc, $v, "<br>";   
}
只需在值的每个“部分”上方添加“键”。 这样可以查看文本在数组中的位置(非常大)


作为相关主题(请参阅注释)中的替代解决方案,以下是一个不带递归迭代器*的版本,使用“简单”递归函数:

function getLeafsWithKeys(array $array, array $keys = []): array
{
  $result = [];
  foreach ($array as $key => $value) {
    $new_keys = is_numeric($key) ? $keys : array_merge($keys, [$key]);
    if (is_array($value)) {
      $result = array_merge([], ...[$result, getLeafsWithKeys($value, $new_keys)]);
    }
    else {
      $result[implode(' > ', $new_keys)][] = $value;
    }
  }
  return $result;
}

演示:

foreach($k=>$v)
?@Jeto我看不出输出有任何差异。我仍然每行得到一个值。嗯,
$k
应该是您需要的键,除非我误解了。糟糕的是,它现在几乎可以工作了:)我在值前面得到键名。您知道如何发布属于该值的所有键的名称吗?(示例:系统>步骤x__y)。我要用你的代码在我的帖子上发布一个小的更新。哦,我错过了那个部分。那么,让我提出一个解决方案(给我几分钟时间)。
foreach ($it as $k => $v) {

  if($k == 0)
    $cc = '<br>(DE)';
  elseif($k == 1)
    $cc = '(DK)';
  elseif($k == 2)
    $cc = '(EN)';
  else
    $cc = '-';

  echo $cc, $v, "<br>";   
}
(DE) Schnitt %1 von %2
(DK) Trin %1 af %2
(EN) Step %1 of %2

(DE) Typ
(DK) Type
(EN) Type

(DE) Aktualisieren
(DK) Opdater
(EN) Update
# system > step_x_y
(DE) Schnitt %1 von %2
(DK) Trin %1 af %2
(EN) Step %1 of %2

# system > type
(DE) Typ
(DK) Type
(EN) Type
function getLeafsWithKeys(array $array, array $keys = []): array
{
  $result = [];
  foreach ($array as $key => $value) {
    $new_keys = is_numeric($key) ? $keys : array_merge($keys, [$key]);
    if (is_array($value)) {
      $result = array_merge([], ...[$result, getLeafsWithKeys($value, $new_keys)]);
    }
    else {
      $result[implode(' > ', $new_keys)][] = $value;
    }
  }
  return $result;
}