将多维数组另存为包含数组键和值的"flat"



>我得到了一个多维数组,其中 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

作为相关主题中解决方案的替代解决方案(请参阅注释(,这里有一个没有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

最新更新