将布线的单行CSV转录为多行,多列HTML表格

时间:2013-01-08 22:34:01

标签: php csv

我有这个荒谬的数据集来处理它只是一个很长的一串零和一串零,它代表每24个项目对应一周的列。这就是我实际上反对的:    关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关,关, 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

并绘制一个这样的例子(再次,只是一个大的长字符串)逗号分隔值,每24个项添加一行,以使其更清晰:

(versus something I've formatted to make it clear)
(monday) 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(tues) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
(wed) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
(thurs) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
(fri) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
(sat) 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
(sun) 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>

在预先格式化的文本中表示:

hour|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

我尝试用不同的方式迭代这些数据,到目前为止,这些方法都没有完成。有没有人有任何建议,当我运行我的codemonkey头对这棵树更多,希望有一个椰子下降?他们已经离开了我的手,因此我无法直接爬上这棵坚果树的来源以获得一个真正的列和行的正确的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 个答案:

答案 0 :(得分:2)

这个怎么样:

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

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

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

答案 1 :(得分: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);

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

<强>更新

实际上,我觉得它有点不那么琐碎,因为你希望你的桌子是面向小时而不是面向日。无论如何:

$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>

答案 2 :(得分: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
)

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

答案 3 :(得分:0)

快速,肮脏且未经测试但这应该给出一系列小时数。每个条目都包含一个工作日数组(Mon -0,Tue - 1,e.t.c。)及其值。

$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;
    }
}