如何用PHP将内部数组展开为多维数组并保留关联键值?
问题
我尝试读取文件内容并存入数组,文件以日期命名,但单个文件中可能包含多个价格。我使用explode函数拆分字符串并存入数组,目前遇到的问题是不知道如何将内部的价格数组展开到外层数组,同时保留date和fruit等其他键值对。
现有代码:
foreach( $paths as $item => $wishlist ){ foreach( $wishlist as $k => $v ){ $file = basename($v); $info = pathinfo($file); $file_name = basename($file,'.'.$info['extension']); $array[$k]['date'] = $file_name; $array[$k]['fruit'] = $v; $content = nl2br(file_get_contents($v)); $words = explode($file_name, $content); $array[$k]['price'] = $words; } }
当前输出:
[{"date":"2023-06-01", "fruit":"apple", "price":["2", "4", "6"] }, {"date":"2023-06-02", "fruit":"orange", "price":["5", "7"] }, {"date":"2023-06-03", "fruit":"mango", "price":["11", "12", "8"] }]
期望输出:
[{"date":"2023-06-01", "fruit":"apple", "price": "2" }, {"date":"2023-06-01", "fruit":"apple", "price": "4" }, {"date":"2023-06-01", "fruit":"apple", "price": "6" }, {"date":"2023-06-02", "fruit":"orange", "price": "5" }, {"date":"2023-06-02", "fruit":"orange", "price": "7" }, {"date":"2023-06-03", "fruit":"mango", "price": "11" }, {"date":"2023-06-03", "fruit":"mango", "price": "12" }, {"date":"2023-06-03", "fruit":"mango", "price": "8" }]
解决方案
你需要遍历拆分后的价格数组,为每个价格单独创建一条记录,保留对应的date和fruit信息。修改后的代码如下:
// 初始化空数组存储最终结果 $result = []; foreach( $paths as $item => $wishlist ){ foreach( $wishlist as $k => $v ){ $file = basename($v); $info = pathinfo($file); $file_name = basename($file,'.'.$info['extension']); // 提取基础信息作为模板 $baseData = [ 'date' => $file_name, 'fruit' => $v ]; $content = nl2br(file_get_contents($v)); $words = explode($file_name, $content); // 遍历每个价格,生成独立记录 foreach($words as $price){ // 过滤空值,避免无效条目 $cleanPrice = trim($price); if($cleanPrice !== ''){ $result[] = array_merge($baseData, ['price' => $cleanPrice]); } } } }
改动说明
- 新增
$result数组专门存储展开后的最终结果,避免原数组的索引冲突问题 - 将
date和fruit存入$baseData作为基础模板,减少重复代码 - 遍历拆分得到的价格数组,为每个非空价格创建新数组条目,合并基础信息与单个价格
- 增加
trim()处理,去除价格前后的空白字符(换行、空格等),确保数据干净
内容的提问来源于stack exchange,提问作者pyeoh 17
相关产品推荐
相关产品推荐

