如何遍历带版本标记的文本字符串并生成分组关联数组
解决方案:按版本分组生成关联数组
我来帮你搞定这个字符串处理和数组构建的需求!核心思路是先按版本分隔符拆分字符串,再逐个处理每个版本下的条目,最终生成符合要求的关联数组(字典)。下面分别用PHP和Python给出实现方案:
PHP实现
$string = "———version1——— item1-result1 item2-result2 item3-result3 ———version2——— Item1-result4 Item2-result5 Item3-result6 ———version3——— Item1-result7 Item2-result8 Item3-result9"; // 按版本分隔符拆分,过滤掉拆分后产生的空元素 $versionBlocks = array_filter(explode('———', $string)); $resultArray = []; foreach ($versionBlocks as $block) { // 拆分版本名称和条目内容(只按第一个空格拆分,避免条目里有空格的情况) list($versionName, $itemsStr) = explode(' ', trim($block), 2); // 拆分每个条目 $items = explode(' ', $itemsStr); foreach ($items as $item) { // 拆分条目名和对应结果(只按第一个连字符拆分,避免结果里有连字符) list($itemName, $result) = explode('-', $item, 2); // 生成要求的键名:首字母大写的版本名 + 下划线 + 首字母大写的条目名 $key = ucfirst($versionName) . '_' . ucfirst($itemName); $resultArray[$key] = $result; } } // 输出结果 print_r($resultArray);
运行后你会得到这样的结果:
Array ( [Version1_Item1] => result1 [Version1_Item2] => result2 [Version1_Item3] => result3 [Version2_Item1] => result4 [Version2_Item2] => result5 [Version2_Item3] => result6 [Version3_Item1] => result7 [Version3_Item2] => result8 [Version3_Item3] => result9 )
Python实现
string = "———version1——— item1-result1 item2-result2 item3-result3 ———version2——— Item1-result4 Item2-result5 Item3-result6 ———version3——— Item1-result7 Item2-result8 Item3-result9" # 拆分版本块,过滤空内容 version_blocks = [block.strip() for block in string.split('———') if block.strip()] result_dict = {} for block in version_blocks: # 拆分版本名和条目字符串 version_name, items_str = block.split(' ', 1) # 拆分每个条目 items = items_str.split(' ') for item in items: # 拆分条目名和结果 item_name, result = item.split('-', 1) # 生成符合要求的键名 key = f"{version_name.capitalize()}_{item_name.capitalize()}" result_dict[key] = result print(result_dict)
运行结果:
{ 'Version1_Item1': 'result1', 'Version1_Item2': 'result2', 'Version1_Item3': 'result3', 'Version2_Item1': 'result4', 'Version2_Item2': 'result5', 'Version2_Item3': 'result6', 'Version3_Item1': 'result7', 'Version3_Item2': 'result8', 'Version3_Item3': 'result9' }
关键细节说明
- 使用
split('———')拆分版本块,确保每个版本的内容被单独提取; - 拆分条目时限制只按第一个空格/连字符拆分,避免条目或结果中包含空格/连字符导致错误;
- 通过
ucfirst()(PHP)或capitalize()(Python)统一键名的首字母大写格式,和你期望的示例格式保持一致。
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

