1

我要处理这个荒谬的数据集,它只是一个大而长的 1 和 0 字符串,它代表每 24 个项目对应于星期几的列。这就是我真正遇到的问题:OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF ,关,关,关,关,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,关,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,关,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,关,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,关,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,关,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开,开

并举一个例子(同样,只有一个大长字符串)逗号分隔值,每 24 项添加换行符以使其更清晰:

(相对于我已经格式化以使其清楚的东西)
(星期一)0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,
(星期二) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,
(周三) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,
(星期四) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,
(周五) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,
(星期六) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,
(太阳) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

我需要将此数据集放入一个 HTML 表中,其中的内容看起来更像我在这里粘贴到 pastebin 的内容:

<table>
<tbody>
<tr>
<th>
<th>Monday</th>
<th>Tuesday</th>
<th>Wednesday</th>
<th>Thursday</th>
<th>Friday</th>
<th>Saturday</th>
<th>Sunday</th>
</tr>
<tr>
<td class="hourHeader">0:00</td>
<td id="1-0" class="highlightOn highlightOff">OFF</td>
<td id="2-0" class="highlightOn highlightOff">OFF</td>
<td id="3-0" class="highlightOn highlightOff">OFF</td>
<td id="4-0" class="highlightOn highlightOff">OFF</td>
<td id="5-0" class="highlightOn highlightOff">OFF</td>
<td id="6-0" class="highlightOn highlightOff">OFF</td>
<td id="7-0" class="highlightOn highlightOff">OFF</td>
</tr>
<tr>
<td class="hourHeader">1:00</td>
<td id="1-1" class="highlightOn highlightOff">OFF</td>
<td id="2-1" class="highlightOn">ON</td>
<td id="3-1" class="highlightOn">ON</td>
<td id="4-1" class="highlightOn">ON</td>
<td id="5-1" class="highlightOn">ON</td>
<td id="6-1" class="highlightOn">ON</td>
<td id="7-1" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">2:00</td>
<td id="1-2" class="highlightOn highlightOff">OFF</td>
<td id="2-2" class="highlightOn">ON</td>
<td id="3-2" class="highlightOn">ON</td>
<td id="4-2" class="highlightOn">ON</td>
<td id="5-2" class="highlightOn">ON</td>
<td id="6-2" class="highlightOn">ON</td>
<td id="7-2" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">3:00</td>
<td id="1-3" class="highlightOn highlightOff">OFF</td>
<td id="2-3" class="highlightOn">ON</td>
<td id="3-3" class="highlightOn">ON</td>
<td id="4-3" class="highlightOn">ON</td>
<td id="5-3" class="highlightOn">ON</td>
<td id="6-3" class="highlightOn">ON</td>
<td id="7-3" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">4:00</td>
<td id="1-4" class="highlightOn highlightOff">OFF</td>
<td id="2-4" class="highlightOn">ON</td>
<td id="3-4" class="highlightOn">ON</td>
<td id="4-4" class="highlightOn">ON</td>
<td id="5-4" class="highlightOn">ON</td>
<td id="6-4" class="highlightOn">ON</td>
<td id="7-4" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">5:00</td>
<td id="1-5" class="highlightOn highlightOff">OFF</td>
<td id="2-5" class="highlightOn">ON</td>
<td id="3-5" class="highlightOn">ON</td>
<td id="4-5" class="highlightOn">ON</td>
<td id="5-5" class="highlightOn">ON</td>
<td id="6-5" class="highlightOn">ON</td>
<td id="7-5" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">6:00</td>
<td id="1-6" class="highlightOn highlightOff">OFF</td>
<td id="2-6" class="highlightOn">ON</td>
<td id="3-6" class="highlightOn">ON</td>
<td id="4-6" class="highlightOn">ON</td>
<td id="5-6" class="highlightOn">ON</td>
<td id="6-6" class="highlightOn">ON</td>
<td id="7-6" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">7:00</td>
<td id="1-7" class="highlightOn highlightOff">OFF</td>
<td id="2-7" class="highlightOn">ON</td>
<td id="3-7" class="highlightOn">ON</td>
<td id="4-7" class="highlightOn">ON</td>
<td id="5-7" class="highlightOn">ON</td>
<td id="6-7" class="highlightOn">ON</td>
<td id="7-7" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">8:00</td>
<td id="1-8" class="highlightOn highlightOff">OFF</td>
<td id="2-8" class="highlightOn">ON</td>
<td id="3-8" class="highlightOn">ON</td>
<td id="4-8" class="highlightOn">ON</td>
<td id="5-8" class="highlightOn">ON</td>
<td id="6-8" class="highlightOn">ON</td>
<td id="7-8" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">9:00</td>
<td id="1-9" class="highlightOn highlightOff">OFF</td>
<td id="2-9" class="highlightOn">ON</td>
<td id="3-9" class="highlightOn">ON</td>
<td id="4-9" class="highlightOn">ON</td>
<td id="5-9" class="highlightOn">ON</td>
<td id="6-9" class="highlightOn">ON</td>
<td id="7-9" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">10:00</td>
<td id="1-10" class="highlightOn highlightOff">OFF</td>
<td id="2-10" class="highlightOn">ON</td>
<td id="3-10" class="highlightOn">ON</td>
<td id="4-10" class="highlightOn">ON</td>
<td id="5-10" class="highlightOn">ON</td>
<td id="6-10" class="highlightOn">ON</td>
<td id="7-10" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">11:00</td>
<td id="1-11" class="highlightOn highlightOff">OFF</td>
<td id="2-11" class="highlightOn">ON</td>
<td id="3-11" class="highlightOn">ON</td>
<td id="4-11" class="highlightOn">ON</td>
<td id="5-11" class="highlightOn">ON</td>
<td id="6-11" class="highlightOn">ON</td>
<td id="7-11" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">12:00</td>
<td id="1-12" class="highlightOn highlightOff">OFF</td>
<td id="2-12" class="highlightOn">ON</td>
<td id="3-12" class="highlightOn">ON</td>
<td id="4-12" class="highlightOn">ON</td>
<td id="5-12" class="highlightOn">ON</td>
<td id="6-12" class="highlightOn">ON</td>
<td id="7-12" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">13:00</td>
<td id="1-13" class="highlightOn highlightOff">OFF</td>
<td id="2-13" class="highlightOn">ON</td>
<td id="3-13" class="highlightOn">ON</td>
<td id="4-13" class="highlightOn">ON</td>
<td id="5-13" class="highlightOn">ON</td>
<td id="6-13" class="highlightOn">ON</td>
<td id="7-13" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">14:00</td>
<td id="1-14" class="highlightOn highlightOff">OFF</td>
<td id="2-14" class="highlightOn">ON</td>
<td id="3-14" class="highlightOn">ON</td>
<td id="4-14" class="highlightOn">ON</td>
<td id="5-14" class="highlightOn">ON</td>
<td id="6-14" class="highlightOn">ON</td>
<td id="7-14" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">15:00</td>
<td id="1-15" class="highlightOn highlightOff">OFF</td>
<td id="2-15" class="highlightOn">ON</td>
<td id="3-15" class="highlightOn">ON</td>
<td id="4-15" class="highlightOn">ON</td>
<td id="5-15" class="highlightOn">ON</td>
<td id="6-15" class="highlightOn">ON</td>
<td id="7-15" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">16:00</td>
<td id="1-16" class="highlightOn highlightOff">OFF</td>
<td id="2-16" class="highlightOn">ON</td>
<td id="3-16" class="highlightOn">ON</td>
<td id="4-16" class="highlightOn">ON</td>
<td id="5-16" class="highlightOn">ON</td>
<td id="6-16" class="highlightOn">ON</td>
<td id="7-16" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">17:00</td>
<td id="1-17" class="highlightOn highlightOff">OFF</td>
<td id="2-17" class="highlightOn">ON</td>
<td id="3-17" class="highlightOn">ON</td>
<td id="4-17" class="highlightOn">ON</td>
<td id="5-17" class="highlightOn">ON</td>
<td id="6-17" class="highlightOn">ON</td>
<td id="7-17" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">18:00</td>
<td id="1-18" class="highlightOn highlightOff">OFF</td>
<td id="2-18" class="highlightOn">ON</td>
<td id="3-18" class="highlightOn">ON</td>
<td id="4-18" class="highlightOn">ON</td>
<td id="5-18" class="highlightOn">ON</td>
<td id="6-18" class="highlightOn">ON</td>
<td id="7-18" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">19:00</td>
<td id="1-19" class="highlightOn highlightOff">OFF</td>
<td id="2-19" class="highlightOn">ON</td>
<td id="3-19" class="highlightOn">ON</td>
<td id="4-19" class="highlightOn">ON</td>
<td id="5-19" class="highlightOn">ON</td>
<td id="6-19" class="highlightOn">ON</td>
<td id="7-19" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">20:00</td>
<td id="1-20" class="highlightOn highlightOff">OFF</td>
<td id="2-20" class="highlightOn">ON</td>
<td id="3-20" class="highlightOn">ON</td>
<td id="4-20" class="highlightOn">ON</td>
<td id="5-20" class="highlightOn">ON</td>
<td id="6-20" class="highlightOn">ON</td>
<td id="7-20" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">21:00</td>
<td id="1-21" class="highlightOn highlightOff">OFF</td>
<td id="2-21" class="highlightOn">ON</td>
<td id="3-21" class="highlightOn">ON</td>
<td id="4-21" class="highlightOn">ON</td>
<td id="5-21" class="highlightOn">ON</td>
<td id="6-21" class="highlightOn">ON</td>
<td id="7-21" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">22:00</td>
<td id="1-22" class="highlightOn highlightOff">OFF</td>
<td id="2-22" class="highlightOn">ON</td>
<td id="3-22" class="highlightOn">ON</td>
<td id="4-22" class="highlightOn">ON</td>
<td id="5-22" class="highlightOn">ON</td>
<td id="6-22" class="highlightOn">ON</td>
<td id="7-22" class="highlightOn">ON</td>
</tr>
<tr>
<td class="hourHeader">23:00</td>
<td id="1-23" class="highlightOn highlightOff">OFF</td>
<td id="2-23" class="highlightOn">ON</td>
<td id="3-23" class="highlightOn">ON</td>
<td id="4-23" class="highlightOn">ON</td>
<td id="5-23" class="highlightOn">ON</td>
<td id="6-23" class="highlightOn">ON</td>
<td id="7-23" class="highlightOn">ON</td>
</tr>
</tbody>
</table>

并在此处以预格式化文本表示:

小时|m|t|w|t|f|s|s
0:00|0|0|0|0|0|0|0
1:00|0|1|1|1|1|1|1
2:00|0|1|1|1|1|1|1
3:00|0|1|1|1|1|1|1
4:00|0|1|1|1|1|1|1
5:00|0|1|1|1|1|1|1
6:00|0|1|1|1|1|1|1
7:00|0|1|1|1|1|1|1
8:00|0|1|1|1|1|1|1
9:00|0|1|1|1|1|1|1
10:00|0|1|1|1|1|1|1
11:00|0|1|1|1|1|1|1
12:00|0|1|1|1|1|1|1
13:00|0|1|1|1|1|1|1
14:00|0|1|1|1|1|1|1
15:00|0|1|1|1|1|1|1
16:00|0|1|1|1|1|1|1
17:00|0|1|1|1|1|1|1
18:00|0|1|1|1|1|1|1
19:00|0|1|1|1|1|1|1
20:00|0|1|1|1|1|1|1
21:00|0|1|1|1|1|1|1
22:00|0|1|1|1|1|1|1
23:00|0|1|1|1|1|1|1

我已经尝试以多种不同的方式迭代这些数据,但到目前为止,没有一种方法能成功。当我在这棵树上运行我的代码猴头时,有没有人有任何建议,希望有一个椰子滴?他们已经把我的手砍掉了,所以我不能只是去爬这棵坚果树的源头来获得一个包含真实列和行的正确 CSV,这是我在得知它不是之前想到的解决方案一个彼得的主要理由或另一个选择。一杯年轻的椰子水,我可以提前感谢任何人的建议。它有电解质!

编辑:这是答案:

$days_hours = array_chunk($input, 24);

array_unshift($days_hours, NULL); // reindexes
unset($days_hours[0]); // removes dummy "0" index

$hours_days = call_user_func_array('array_map', array(NULL)+$days_hours);

foreach($hours_days as $hourKey => $hour) {    

    echo '<tr><td id="hourHeader">' . $hourKey . ':00</td>';

    foreach($hour as $dayKey => $day) {

        $dayId = $dayKey + 1;
        $id = $dayId . '-' . $hourKey;

        if ($day === "1") {
            $text = "ON";
            $class = "highlightOn";
        } else {
            $text = "OFF";
            $class = "highlightOff";
        }

        if ($dayKey !== 6) {
            echo '<td class="' . $class . '" id="'. $id . '">' . $text . '</td>';
        } else {
            echo '<td class="' . $class . '" id="'. $id . '">' . $text . '</td></tr>';
        } 
    }
}
4

4 回答 4

2

这个怎么样:

$values = explode(',', $inputData);
$days = array_chunk($values, 24);

http://php.net/manual/en/function.array-chunk.php

语义上与@Madbreak 的解决方案相同:您会得到一个数组,其中包含每天的小时值数组。

于 2013-01-08T23:07:53.000 回答
2

这不是很难,我想?

$input = "OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,OFF,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,OFF,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,OFF,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,OFF,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,OFF,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON";


function on_off_to_bool($v) {
    static $map = array('OFF'=>false,'ON'=>true);
    return $map[strtoupper($v)];
}

$input_array = explode(',', $input);
$input_bools = array_map('on_off_to_bool', $input_array);

$days_hours = array_chunk($input_bools, 24);

// $days_hours is now an array of days of the week, 0-indexed,
// each containing an array of BOOLs by hour, 0-indexed.

// If you want 1-indexed days, do this:
array_unshift($days_hours, NULL); // reindexes
unset($days_hours[0]); // removes dummy "0" index

var_export($days_hours);

从中生成所需的 HTML$days_hours应该是微不足道的。

更新

实际上,在我看来,这不是微不足道的,因为你希望你的表是面向小时而不是面向天的。不管:

$hours_days = call_user_func_array('array_map', array(NULL)+$days_hours);

现在生成 HTML:

$headers = array('hour', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
?>
<table>
  <thead>
    <tr>
<?php foreach($headers as $header):?>
        <th><?=$header?></th>
<?php endforeach?>
    </tr>
  </thead>
  <tbody>
<?php foreach($hours_days as $hour => $week):?>
     <tr>
        <th class="hourHeader"><?=$hour?>:00</th>
<?php   foreach($week as $dow => $value):
            $id = 'schedule-'.($dow+1).'-'.$hour;
            $class = ($value) ? 'highlightOn' : 'highlightOff';
            $text = ($value) ? "ON" : "OFF";
?>
        <td id="<?=$id?>" class="<?=$class?>"><?=$text?></td>
<?php   endforeach?>
     </tr>
<?php endforeach?>
  </tbody>
</table>
于 2013-01-08T23:09:08.457 回答
1

开始吧,呃,怎么样:

$bits = explode(',', $bigLongString);
$days = array();
$hours = 24;

for($day=0; $day < 7; $day++){
    for($i=0; $i<$hours; $i++){
        $days[$day][] = $bits[$i + $hours * $day];
    }
}

那会让你得到类似的东西:

array (
    // day 0
    0 => array(
        OFF,OFF,OFF, ... OFF   // 24 entries
    )
    // ... to index (day) 6
)

我想这应该足以让你开始吧?我应该提一下,是的,这还没有经过测试。

于 2013-01-08T22:47:41.010 回答
0

快速,肮脏且未经测试,但这应该会花费数小时。每个条目将包含一个工作日数组(周一 -0、周二 - 1 等)及其值。

$values = str_getcsv($csvString);
$hourMap = array();

$hour = 0;
$weekday = 0;
foreach($values as $value){
    if(!array_key_exists($hour,$hourMap)){
        $hourMap[$hour] = array();
    }
    $hourMap[$hour][$weekday] = $value;
    $hour = ($hour + 1)%24;
    if($hour == 0){
        $weekday = ($weekday + 1)%7;
    }
}
于 2013-01-08T22:47:55.563 回答