【问题标题】:Save multidimensional array as "flat" with array keys and values使用数组键和值将多维数组保存为“平面”
【发布时间】:2020-03-19 20:31:14
【问题描述】:

我得到了一个多维数组,它有 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
                    )

            ) ....

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

# 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

# system > next_button
(DE) Aktualisieren
(DK) Opdater
(EN) Update

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

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($merged_array));
foreach($it as $v) {
  echo $v, "<br>";    
}

几个问题:

  • 不确定如何在值上方显示“键行”。

  • [0][1][2] 必须替换为国家代码,0=DE,1=DK,2=EN。

类似这样的:

# 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

# system > next_button
(DE) Aktualisieren
(DK) Opdater
(EN) Update

希望你们中的一个可以帮助我:)

更新:

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

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

【问题讨论】:

  • foreach ($it as $k =&gt; $v)?
  • @Jeto 我看不出输出有什么不同。我仍然每行得到一个值。
  • 好吧,$k 应该是您需要的关键,除非我误解了。
  • 我的错,它现在几乎可以工作了:) 我得到了值前面的键名。您知道如何将所有“属于”该值的键的名称发布吗? (例如:系统> step_x_y)。将使用您的代码在我的帖子中发布一个小更新。
  • 哦,我错过了那部分。那么让我提出一个解决方案(给我几分钟)。

标签: php arrays multidimensional-array


【解决方案1】:

作为相关主题(参见 cmets)的替代解决方案,这里有一个没有 RecursiveIterator* 的版本,使用“简单”递归函数:

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;
}

演示:https://3v4l.org/kWZUW

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多