2012-11-17 26 views
5

क्षमा करें अगर इससे पहले पूछा गया है कि मुझे अपनी समस्या का उत्तर खोजने में परेशानी हो रही है।php foreach

मैं PHP में अपने वेब एप्लिकेशन के लिए कैलेंडर सिस्टम और शेड्यूल सिस्टम बनाने और एक विशेष क्षेत्र में कठिनाई होने का प्रयास कर रहा हूं।

मेरे पास एक बयान जहां यह दिन के समय को आकर्षित होगा 12:00 AM शुरू करने और पाश के लिए यह अंदर 11:30 PM पर

पर जाकर हार "के लिए", मैं एक foreach जो मैं गूंज करना चाहते हैं किसी विशेष समय से मेल खाने वाले सरणी में ऑब्जेक्ट्स को बाहर निकालें।

सबकुछ मैंने कोशिश की है जिसमें उपयोग करने के लिए शामिल है, जबकि और बयानों के बयान में यह नहीं दिखाया गया है कि मैं क्या कर रहा हूं जिसके बाद घटनाएं आगे बढ़ रही हैं।

यहां वर्तमान में मेरे कोड

<?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>"; 
     } 
    } 
} 
?> 

है मैं
: 12:00 पूर्वाह्न
12:30 पूर्वाह्न
01:00 पूर्वाह्न
01:30 पूर्वाह्न
02 के साथ एक पृष्ठ को देखते हुए कर रहा हूँ :: 00 AM
02:30 पूर्वाह्न
03:00 पूर्वाह्न
03:30 पूर्वाह्न
04:00 पूर्वाह्न
04:30 पूर्वाह्न
05:00 पूर्वाह्न
05:30 पूर्वाह्न

बार मैं समय से मेल खाते के साथ नियुक्ति चाहते हैं उसके आगे।

मैं मैं तथापि के रूप में मैं इसे ठीक से एकीकृत नहीं कर सकते हैं और मैं उनके कोड देख कोशिश की है उनकी प्रणाली का उपयोग नहीं कर सकते http://mrbs.sourceforge.net/ को कुछ इसी तरह प्राप्त करने के लिए कोशिश कर रहा हूँ और यह कई फाइलों पर इंगित किया जाना है और लगता है मैं कर रहा हूँ उस समारोह को समझने की कोशिश करने में परेशानी हो रही है जिसके बाद मैं हूं।

कृपया मुझे बताएं कि यह पर्याप्त स्पष्ट नहीं है और आगे की व्याख्या करने का प्रयास करेगा।

+0

आपके कोड का परिणाम क्या होता है, और यह आप किस चीज के लिए खोज रहे हैं उससे भिन्न है? – octern

+0

फोरैच लूप के तहत जगह में अगर कथन के साथ कुछ भी प्रकट नहीं होता है। ऐसा लगता है कि $ tNow 12:00 बजे रहेगा और आगे नहीं बढ़ेगा। मुझे आगे जाने के लिए $ tNow कैसे मिलता है ताकि कोई ईवेंट होने पर foreach अंततः सच हो जाएगा? – Laywah

उत्तर

0

मैं हर किसी को है कि इस मुद्दे पर सलाह प्रदान की धन्यवाद देना चाहते हैं, मैं अंत में यह एक और चर जोड़े के साथ काम करने और एक सरणी में एक सरणी को संग्रहीत करने का विधि का उपयोग मिल गया है। जब यह एक मिलान के साथ एक प्रवेश पाया

अंतिम कोड की तरह

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

लग रहा है चर $ ईएएस मैं तो नियंत्रित करने के लिए 0 करने के लिए इसे शुरू में और फिर सेट करके वह नंबर इसे शुरू होगा सक्षम था का उपयोग करके अगर यह कथन के माध्यम से चला गया, जहां 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"); 

संपादित करें: आप mysql_fetch_object के बजाय mysql_fetch_assoc के दौरान उपयोग करना चाहिए।

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

साथ

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

बदलें हटाएँ: $events[] = $items;

सुनिश्चित करने के बाद सभी कोड निष्पादित होने पर आपके जबकि बयान से ऊपर समाप्त होता है (कोड आप अपने प्रश्न में सूचीबद्ध) - ब्रैकेट } बंद करने।

+0

क्षमा करें मैं यह उल्लेख करना भूल गया कि मैंने $ start_time और $ end_time को किसी अन्य फ़ाइल में सेट किया है। मुझे एक सामान्य mysql.php भी मिला है जो आपके बारे में बात करने वाली कनेक्शन जानकारी को परिभाषित करता है। मुझे mysql से जानकारी के साथ एकत्रित $ आइटम मिल रहा है, हालांकि मेरा सबसे हालिया मुद्दा जहां जानकारी के लिए निर्धारित समय से मेल नहीं खाती है। – Laywah

+0

तो समस्या से क्या समस्या है? क्या यह HTML आउटपुट के बारे में है; इसे टेबल या कुछ में रखने की कोशिश कर रहा है? – salih0vicX

+0

एक print_r ($ ईवेंट) कर रहा है निम्नलिखित ऐरे ([0] => stdClass ऑब्जेक्ट ([apnt_id] => 6 [apnt_person] => 3 [apnt_date] => 2012-11-17 [apnt_start] => 00 : 00 [apnt_finish] => 00:30 [apnt_brief] => परीक्षण 3 [apnt_description] => परीक्षण विवरण 3) [1] => stdClass ऑब्जेक्ट ([apnt_id] => 4 [apnt_person] => 3 [apnt_date] = > 2012-11-17 [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, यह वह जगह है लगभग सही समय दिख रहे हैं कि उन्हें घटनाओं को और क्यों करना चाहिए, हालांकि ..... यदि मेरे पास दिन के लिए तीन घटनाएं हैं, तो मुझे 12 बजे से 12 बजे तक तीन बार दो बार दोहराव पर 12 बजे से 12 बजे तक दो बार मिल रहा है .. मुझे विश्वास है यह वक्तव्य वक्तव्य के कारण है, क्या यह सही है? क्या ऐसा करने का कोई तरीका है ताकि 12am से 12am के 1 पुनरावृत्ति और 3 घटनाओं को उस 1 पुनरावृत्ति पर प्रस्तुत किया जा सके? – Laywah