如何将多维数组输出为分组式键值对列表?
多维数组转分组式键值对列表解决方案
直接用递归遍历的方式就能解决分组混乱的问题,核心是跟踪当前的分组路径,遇到子数组就生成新分组,遇到字符串值就对应到当前分组下。
实现代码
function formatArrayToGroups($array, $prefix = '') { $output = ''; $hasItems = false; foreach ($array as $key => $value) { $currentKey = $prefix ? "{$prefix}.{$key}" : $key; if (is_array($value)) { // 已有内容的话,先换行分隔分组 if ($hasItems) { $output .= "\n\n"; } // 递归处理子数组 $subOutput = formatArrayToGroups($value, $currentKey); if (!empty(trim($subOutput))) { $output .= "[{$currentKey}]\n"; $output .= $subOutput; $hasItems = true; } } else { // 当前分组还没输出标题的话,先加标题 if (!$hasItems && $prefix) { $output .= "[{$prefix}]\n"; $hasItems = true; } $output .= "{$key}={$value}\n"; } } return rtrim($output); } // 你的输入数组 $inputArray = [ "ACTION" => [ "key1" => "Item 1", "key2" => "Item 2", "key3" => "Item 3", "key4" => "Item 4" ], "ADMIN" => [ "key1" => "Item 1", "key2" => [ "subkey1" => "Item 1", "subkey2" => "Item 2" ] ] ]; // 输出结果 echo formatArrayToGroups($inputArray);
输出结果
[ACTION] key1=Item 1 key2=Item 2 key3=Item 3 key4=Item 4 [ADMIN] key1=Item 1 [ADMIN.key2] subkey1=Item 1 subkey2=Item 2
代码说明
- 递归函数会自动跟踪当前的分组路径(比如
ADMIN.key2),遇到子数组就生成对应的分组标题 - 处理字符串值时,会自动归属到当前分组下,不会出现分组和内容不匹配的问题
- 自动处理分组之间的空行分隔,保证输出格式符合预期
内容的提问来源于stack exchange,提问作者Armin Hierstetter
相关产品推荐
相关产品推荐

