2012-11-17 7 views
5

申し訳ありませんこれまでに質問されている場合は、私の問題の答えを見つけるのに苦労しています。php foreach文の問題のために

私はPHPでWebアプリケーションのカレンダーシステムとスケジュールシステムを構築しようとしており、ある特定の領域では問題があります。

私が持っている、それは午前12時から始まり、ループのために、この内側23:30

で仕上げ一日の時間を描くだろう声明「のために」、私は私がエコーしたいのforeachを持っています特定の時間に一致するオブジェクトを配列内に配置します。

for、for、foreach文を使用することを含めて私が試したことはすべて、私が時間の横に並んでいるイベントです。ここ

は私が
12時00分AM
AM
1:30 AM
02午前12:30
一時にページを与えられています現時点では私のコード

<?php 
$tStart = strtotime($start_time); 
$tEnd = strtotime($end_time); 
$tNow = $tStart; 

while($items = mysql_fetch_object($result)){ 
    $events[] = $items; 
} 

for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){ 
    // Time to color the rows to make it easier to read 
    if(!isset($day_row)){ 
     $day_row = "0"; 
    } 
    if(isset($day_row) && $day_row >= "2"){ 
     $day_row--; 
    } 
    else{ $day_row++; 
    } 

    //This bit draws the first column. 
    echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>"; 

    // MySQL stuff is now here 
    foreach($events as $e => $item){ 
     if($item->apnt_start == $tnow){ 
      $rowspan = ((strtotime($item->apnt_finish)-strtotime($item->apnt_start))/"1800"); 
      echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\">".$item->apnt_start."-".$item->apnt_finish." ".$item->apnt_brief."</td></tr>"; 
     } 
    } 
} 
?> 

です:00 AM
2時30 AM
3時AM
3:30 AM
4時00分AM
午前5時00分AM
私は時間が一致するとの約束をしたい時に次の午前5時30分AM

4:30 AM

私はそれを適切に統合することができないと私は彼らのコードを見て試してみましたしかしとして、私は自分のシステムを使用することはできませんhttp://mrbs.sourceforge.net/ に似た何かを達成しようとしていますし、それが多くのファイルを指しているように見えると私は私は後に機能を理解しようとするのに困っている。

これが十分明確ではないかどうかを教えてください。さらに説明してください。あなたは以下の変数の値を定義および設定する必要が

+0

あなたのコードはどのような結果になりますか、探しているものとはどのように違いますか? – octern

+0

foreachループの下にifステートメントを置き、何も表示されません。 $ tNowは午前12時に滞在し、今後は進まないようです。 イベントがあるとforeachが最終的に成立するように、どのように$ tを取得するのですか? – Laywah

答えて

0

私はこの問題についてのアドバイスを提供するすべての人に感謝したいと思い、私は最終的に追加、別の変数での作業と配列の配列を格納する方法を使用して、それを持っています。

最終的なコードは、私はそれはマッチングのエントリを見つけたとき、それは最初にして、0に設定することでで始めることになる数を制御することができた変数$ EASを使用することにより

<?php 
    $tStart = strtotime($start_time); 
    $tEnd = strtotime($end_time); 
    $tNow = $tStart; 
    $events = array(); 
    $eas = "0"; // eas stands for Event Array Start. this will be used to cycle through the events in the array. 
    while($items = mysql_fetch_assoc($result)){ 
     $events[] = $items; 
    } 

    for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){ 
     // Time to color the rows to make it easier to read 
      if(!isset($day_row)){ 
       $day_row = "0"; 
      } 
      if(isset($day_row) && $day_row >= "2"){ 
       $day_row--; 
      } 
      else{ $day_row++; 
      } 

      //This bit draws the first column. 
      echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>"; 
     if(strtotime($events[$eas]['apnt_start']) == $tNow) {  
       $rowspan = ((strtotime($events[$eas]['apnt_finish'])-strtotime($events[$eas]['apnt_start']))/"1800"); 
       echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\" >".$events[$eas]['apnt_start']."-".$events[$eas]['apnt_finish']." ".$events[$eas]['apnt_brief']."</td></tr>"; 
       $eas++; 
      } 
      else{ 
       echo "<td class=\"day_row".$day_row."\"></td>"; 
      } 
     } //end for 
?> 

のように見えますif文の最後に$ eas ++を指定してインクリメントします。

これは、予定がなかった場合、$ easは実行されず、インクリメントされないため、最後にインクリメントされた$ easに残ることが証明されました。

皆様のご協力をいただき、ありがとうございます。

0

$start_time = "09:00 AM"; 
$end_time = "11:30 PM"; 

はまた、あなたは、クエリと(while($items = mysql_fetch_object($result)){書上記の)データベース接続を追加する必要があります。

mysql_connect("hostname", "user", "password"); 
mysql_select_db("mydb"); 
$result = mysql_query("select * from mytable"); 

EDIT: ますmysql_fetch_objectの代わりにmysql_fetch_assocを使用する必要があります。 削除

while($items = mysql_fetch_assoc($result)){ 

while($items = mysql_fetch_object($result)){ 

置き換え:$events[] = $items;

は、すべてのコードが実行された後、あなたのwhile文は、上記の終了を確認してください(あなたがあなたの質問に記載されているコードは) - ブラケット}を閉じます。

+0

申し訳ありません私は$ start_time&$ end_timeを別のファイルに設定していることを忘れていました。また、あなたが話している接続情報を定義する汎用のmysql.phpもあります。 mysqlからの情報が入力された$項目が取得されていますが、最新の問題はスケジュールされた時刻と一致しません。 – Laywah

+0

だから問題は何か?これはHTMLの出力ですか?それをテーブルなどに入れようとしていますか? – salih0vicX

+0

print_r($ events)を実行すると、 配列([0] => stdClassオブジェクト([apnt_id] => 6 [apnt_person] => 3 [apnt_date] => 2012-11-17 [apnt_start] => 00テストの説明3)[1] => stdClassオブジェクト([apnt_id] => 4 [apnt_person] => 3 [apnt_date] => 00 [apnt_finish] => 00:30 [apnt_brief] > [apnt_start] => 08:30 [apnt_finish] => 09:00 [apnt_brief] =>テスト1 [apnt_description] =>テストの説明1)[2] => stdClassオブジェクト([apnt_id] => > 5 [apnt_person] => 3 [apnt_date] => 2012-11-17 [apnt_start] => 12:00 配列の詳細を入力できません。 – Laywah

0

これは正常に機能するはずです。

<?php 
    $tStart = strtotime($start_time); 
    $tEnd = strtotime($end_time); 
    $tNow = $tStart; 

    echo '<table>'; 

    while($events = mysql_fetch_assoc($result)){ 
     for($tNow=$tStart; $tNow<$tEnd; $tNow=strtotime('+30 minutes',$tNow)){ 
     // Time to color the rows to make it easier to read 
      if(!isset($day_row)){ 
       $day_row = "0"; 
      } 
      if(isset($day_row) && $day_row >= "2"){ 
       $day_row--; 
      } 
      else{ $day_row++; 
      } 

      //This bit draws the first column. 
      echo "<tr><td class=\"day_row".$day_row."\" width=\"70px\">".date("h:i A",$tNow)."</td>"; 
      if(strtotime($events['apnt_start']) == $tNow) {  
       $rowspan = ((strtotime($events->apnt_finish)-strtotime($events->apnt_start))/"1800"); 
       echo "<td class=\"day_row_apnt\" rowspan=\"$rowspan\">".$events->apnt_start."-".$events->apnt_finish." ".$events->apnt_brief."</td></tr>"; 
      } 
     } //end for 
    } //end while 
    echo '</table>'; 
?> 
+0

おかげSalih0vicX、 これは、ほぼ正しい。彼らはどこに行こうとしているのでしょうか..... 私は3日間のイベントがある場合、午前12時から午前12時まで3回、午前12時から午前12時までの各イベントに1回のイベントを3回行います。これはwhileステートメントによるものですが、これは正しいですか? には、午前12時から午後12時までの1回の反復と、その1回の反復で提示された3つのイベントがあるように、その方法がありますか? – Laywah