PHP合并基于重复键的多维嵌套数组
合并多维数组中重复日期对应的影院放映信息
我需要处理一个带嵌套结构的多维数组,数组里存在重复的日期项,要把相同日期对应的影院放映信息合并到同一个日期实例中。
原数组示例:
$showTimes = array( array( 'day' => 'Monday', 'details' => array( array( 'theater' => 'Theater 1', 'times' => '1:00, 7:00, 8:00' ) ) ), array( 'day' => 'Tuesday', 'details' => array( array( 'theater' => 'Theater 1', 'times' => '2:00, 5:00' ) ) ), array( 'day' => 'Tuesday', 'details' => array( array( 'theater' => 'Theater 2', 'times' => '4:00, 9:00' ) ) ), array( 'day' => 'Wednesday', 'details' => array( array( 'theater' => 'Theater 1', 'times' => '1:00, 7:00, 8:00' ) ) ) );
期望把两个Tuesday项合并,让当日的所有影院信息都放在同一个details数组里。我之前尝试的代码逻辑有误,无法达到预期:
$new_array = array(); foreach ($showTimes as $subArray) { foreach ($subArray as $key=>$value) { $new_array['details'][$key] = $value; } } print_r($new_array);
正确解决方案
核心思路是用日期作为临时数组的键,快速判断是否已存在该日期,存在则追加details,不存在则初始化:
$merged = array(); foreach ($showTimes as $item) { $day = $item['day']; // 如果该日期已存在,追加details if (isset($merged[$day])) { $merged[$day]['details'] = array_merge($merged[$day]['details'], $item['details']); } else { // 不存在则直接存入临时数组 $merged[$day] = $item; } } // 把关联数组转成索引数组,符合期望的输出结构 $finalArray = array_values($merged); print_r($finalArray);
输出结果
Array ( [0] => Array ( [day] => Monday [details] => Array ( [0] => Array ( [theater] => Theater 1 [times] => 1:00, 7:00, 8:00 ) ) ) [1] => Array ( [day] => Tuesday [details] => Array ( [0] => Array ( [theater] => Theater 1 [times] => 2:00, 5:00 ) [1] => Array ( [theater] => Theater 2 [times] => 4:00, 9:00 ) ) ) [2] => Array ( [day] => Wednesday [details] => Array ( [0] => Array ( [theater] => Theater 1 [times] => 1:00, 7:00, 8:00 ) ) ) )
内容的提问来源于stack exchange,提问作者user19103974
相关产品推荐
相关产品推荐

