Php 将多维数组另存为";“平坦”;使用数组键和值
我得到了一个多维数组,它的X个数是。。。。尺寸? 我的阵列示例: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 )
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;
}