php - 嵌套数组,用数字替换字母键并保持结构
问题描述
我有一个嵌套数组,深度为 4 层。
我想用数字而不是元级别替换键,这个数组应该保留字母键。
该数组将有很多值,并且会有更多像 Marco Mueller 这样的帐户,这只是一个简短的示例。重要的是,它在被数字键替换后将保持相同的嵌套结构。
$array = array (
'Marco Mueller' =>
array (
'meta' =>
array (
'accountName' => 'Marco Mueller',
'accountId' => '1',
'sum' => '3,659.06',
),
'Conrad, Ute' =>
array (
'meta' =>
array (
'customerName' => 'Conrad, Ute',
'customerId' => '8391',
'sum' => '457.59',
),
'Fidor Bank' =>
array (
'meta' =>
array (
'bankName' => 'Fidor Bank',
'bankKey' => 'FID',
'sum' => '457.59',
),
'H1-2019' =>
array (
'meta' =>
array (
'periodName' => 'H1-2019',
'periodId' => '5',
'sum' => '457.59',
),
),
),
),
),
);
结果应该是
$array = array (
array (
'meta' =>
array (
'accountName' => 'Marco Mueller',
'accountId' => '1',
'sum' => '3,659.06',
),
'items' => array (
'meta' =>
array (
'customerName' => 'Conrad, Ute',
'customerId' => '8391',
'sum' => '457.59',
),
'items' =>
array (
'meta' =>
array (
'bankName' => 'Fidor Bank',
'bankKey' => 'FID',
'sum' => '457.59',
),
'items' => array (
'meta' =>
array (
'periodName' => 'H1-2019',
'periodId' => '5',
'sum' => '457.59',
),
),
),
array (
'meta' =>
array (
'periodName' => 'H2-2019',
'periodId' => '6',
'sum' => '600',
),
),
),
),
),
);
解决方案
我用这个功能解决了我的问题,如果有人知道如何使它更优雅和高效,欢迎您!
private function getValues(array $array)
{
$newArray = [];
foreach ($array as $item) {
$meta = $item['meta'];
unset($item['meta']);
$arrayValues = array_values($item);
if (count($arrayValues) > 1 || count($arrayValues[0]) > 1) {
$arrayValues = $this->getValues($arrayValues);
}
if (!$arrayValues) {
$values = [
'meta' => $meta,
];
} else {
$values = [
'meta' => $meta,
'items' => $arrayValues,
];
}
$newArray[] = $values;
}
return $newArray;
}
推荐阅读
- docker - 使用 docker 时出错 - 连接期间出错
- c# - 参数 2:无法从 bool 转换为 System.Func
- c++ - 如何选择处理输入数据的设计模式?
- javascript - 弄清楚如何通过 Chrome DevTools 在网页中加载元素?
- python-3.x - 如何检查我的机器人是否在语音频道中?不和谐.py
- android - 我需要帮助才能从 Windows 上的 Git Hub 运行 React 本机应用程序
- xamarin - Xamarin IOS - UIImagePickerController 的 MediaURL 路径问题
- html - 不同可折叠部分下的多个选项卡集之间的交互以及使用 R markdown html 格式化输出文档的问题
- python - 使用基于另一个数据框中的 2 个窗口日期的值填充新列(在 Pandas 和 PySpark 中)
- python - 如何在创建之前验证 Django REST 框架中的输入?