1

このばかげたデータセットを処理する必要があります。これは、1と0の1つの大きくて長い文字列であり、24項目ごとの曜日に対応する列を表します。これは私が実際に反対しているものです: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

そして、この例(ここでも、1つの大きな長い文字列)をコンマで区切った値を描画し、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,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テーブルに入れる必要があります。このテーブルでは、ここにペーストビンに貼り付けたもののように見えます。

<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

速く、汚く、テストされていませんが、これは時間の配列を与えるはずです。各エントリには、平日の配列(Mon -0、Tue -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 に答える