如何按时间顺序列出多维数组内的时间并获取对应关联ID信息
解决方案
核心思路
- 首先将多层嵌套的多维数组扁平化,提取每一个有效时间点对应的
professional_id、local_id、所属日期、时间信息 - 对提取后的所有时间条目按完整时间戳升序排序,即可得到按时间顺序排列的列表
- 渲染时间选项时将关联字段绑定到选项属性,选中时直接读取对应属性即可获取所需信息
实现代码(PHP)
// 假设你的原始数组存在 $originArray 变量中 $flatTimeList = []; // 遍历所有专业人员 foreach ($originArray['profissional_id'] as $professionalId => $professionalData) { // 遍历该专业人员下的所有地点 foreach ($professionalData['local_id'] as $localId => $dateList) { // 遍历该地点下的所有日期 foreach ($dateList as $date => $timeList) { // 跳过空的时间列表 if (empty($timeList)) continue; // 遍历该日期下的所有时间 foreach ($timeList as $time) { // 跳过空的时间值 if (empty($time)) continue; $fullDatetime = $date . ' ' . $time; $flatTimeList[] = [ 'datetime' => $fullDatetime, 'timestamp' => strtotime($fullDatetime), 'professional_id' => $professionalId, 'local_id' => $localId, 'date' => $date, 'time' => $time ]; } } } } // 按时间戳升序排序 usort($flatTimeList, function ($a, $b) { return $a['timestamp'] - $b['timestamp']; }); // 现在 $flatTimeList 就是已经按时间顺序排列的列表,可直接用于渲染输出 print_r($flatTimeList);
前端选中取值示例
如果需要在Web页面中选择时间,可以在渲染时将关联字段绑定到DOM属性,选中时直接读取:
<select id="timePicker"> <?php foreach ($flatTimeList as $item): ?> <option value="<?php echo $item['datetime'] ?>" data-professional-id="<?php echo $item['professional_id'] ?>" data-local-id="<?php echo $item['local_id'] ?>" data-date="<?php echo $item['date'] ?>" > <?php echo $item['datetime'] ?> </option> <?php endforeach; ?> </select> <script> document.getElementById('timePicker').addEventListener('change', function() { const selectedOption = this.options[this.selectedIndex]; const professionalId = selectedOption.dataset.professionalId; const localId = selectedOption.dataset.localId; const date = selectedOption.dataset.date; // 后续业务逻辑 console.log(professionalId, localId, date); }); </script>
内容的提问来源于stack exchange,提问作者Rodrigo Henrique
相关产品推荐
相关产品推荐

