[PHP] Extra 0 plaatsen achter variabele in for loop

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Met onderstaand script maak ik een lijstje met tijden. Deze tijden zijn steeds een half uur. Bijvoorbeeld: 8:00 - 8:30 - 9:00 enz.
Nu worden de halve uren goed weergegeven, maar de hele uren niet. het staat er nu zo: 8:0 - 8:30 - 9:0 enz.

Weet iemand wat ik moet doen om de hele uren te laten zien met twee nullen i.p.v. 1 nul zoals het nu is.
PHP:
1
2
3
4
5
6
7
8
9
10
<?php 
for($tijd=800;$tijd<2400;$tijd=$tijd+50)  
{  
  $uur = floor($tijd / 100);  
  $minuten = str_replace('50','30', $tijd%100);  

  echo $uur : $minuten;   
}  

?> 

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

PHP:
1
2
3
4
if ( substr($minuten,-1, 1) == "0" )
{
$minuten = $minuten+"0";
}

[ Voor 17% gewijzigd door Snake op 08-07-2006 20:53 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Je moet aan de gang met functies als printf, waaraan je een format-string aan mee kunt geven. In plaats van direct te printen kun je ook sprintf gebruiken om het resultaat op te kunnen slaan in een variabele, zodat je er later nog wat mee kunt doen. <- daar staat ook het formaat van de format-string beschreven.

Voorbeeld:
PHP:
1
2
3
4
$teststring = sprintf("%2.3f", 3);
echo $teststring

//Uitkomst is: 3.000

[ Voor 12% gewijzigd door Sybr_E-N op 08-07-2006 20:54 ]


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
sprinf heb ik al geprobeert. Alleen zet hij er dan ook een 0 achter als de tijd bijvoorbeeld 8.30 is. Ik krijg dan 8.00 - 8.300 - 9.00.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Los van het feit dat str_pad geschikt is voor het toevoegen van karakters: wat een rare oplossing. :? Waarom rekenen met vijftigtallen als je dertigtallen nodig hebt? Waarom geen echte timestamps?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Als je echt met tijd werkt zou je misschien date ervoor kunnen gebruiken. Om er nou een zo'n grote for-loop van te maken gaat wel ver.

Acties:
  • 0 Henk 'm!

  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 20-09 23:09
Matthijs1982 schreef op zaterdag 08 juli 2006 @ 20:55:
sprinf heb ik al geprobeert. Alleen zet hij er dan ook een 0 achter als de tijd bijvoorbeeld 8.30 is. Ik krijg dan 8.00 - 8.300 - 9.00.
Dan doe je iets niet goed. Met welke format-string heb je sprintf uitgeprobeerd?

Acties:
  • 0 Henk 'm!

  • robbert
  • Registratie: April 2002
  • Laatst online: 11:40
PHP:
1
2
3
for($i = strtotime("8:00"); $i < strtotime("+1 day", strtotime("0:00")); $i = strtotime("+30 minutes", $i)) {
    echo strftime("%H:%M",$i)."<br/>";  
}

Leuk alleen de datum/tijd functies gebruikt ;)


Zonder datum/tijd functies kan natuurlijk ook:
PHP:
1
2
3
for($tijd=8*60;$tijd<24*60;$tijd=$tijd+30) {  
    echo sprintf("%02d:%02d",$tijd/60,$tijd%60)."<br />";
}

[ Voor 80% gewijzigd door robbert op 08-07-2006 21:06 ]


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Ik wil dat mensen zich kunnen inschrijven op een blok van een half uur. Bovenaan de pagina selecteren ze een datum. Dan verschijnt er een tabel met steeds blokken van een half uur.
8.00
8.30
9.00
enz.


Wanner ik str_pad($minuten, 3, "0", STR_PAD_RIGHT); gebruik, werkt dit ook bij de halve uren. Dat wil ik dus niet, ik wil het alleen bij de hele uren, want die geven maar een 0 weer.

Dit werkt ook niet. Of doe ik het fout. :?
PHP:
1
2
3
4
5
6
<? 
if ( substr($minuten,-1, 1) == "0" ) 
{ 
$minuten = $minuten+"0"; 
} 
?>


ik heb nu dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
for($tijd=800;$tijd<2400;$tijd=$tijd+50) 
{ 
  $uur = floor($tijd / 100); 
  $minuten = str_replace('50','30', $tijd%100); 

  if ( substr($minuten,-1, 1) == '0' ) 
{ 
$minuten = $minuten+'0'; 
}

  echo "$uur:$minuten"; 
 }

[ Voor 36% gewijzigd door Matthijs1982 op 08-07-2006 21:04 ]


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Eegee schreef op zaterdag 08 juli 2006 @ 21:00:
[...]

Dan doe je iets niet goed. Met welke format-string heb je sprintf uitgeprobeerd?
Dit heb ik boven de laatste echo in mijn script gezet. Ik kreeg dan komma getallen en deze werd ook toegepast op de halve uren.

PHP:
1
$minuten2 = sprintf ("%01.2f", $minuten);

[ Voor 37% gewijzigd door Matthijs1982 op 08-07-2006 21:07 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je doet het nog steeds met die vieze stringfuncties en continu maar impliciet casten? [rml]robbertkrebbers in "[ PHP] Extra 0 plaatsen achter variabele ..."[/rml] heeft IMO de twee beste oplossingen; eerst een makkelijk te begrijpen/leesbare (die ik zou gebruiken) en daarna een minder makkelijk leesbare maar wel beter geoptimaliseerd.

Nogmaals: ik snap niet waarom je zo ranzig doet? Om nog maar niet te spreken over het feit dat je stug blijft vasthouden aan het omrekenen van vijftigtallen naar dertigtallen. :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Matthijs1982
  • Registratie: Augustus 2005
  • Laatst online: 02-06-2021
Ik heb nu dit. Het probleem is dat de tijden in de for loop ook gecontroleerd dienen te worden met afspraken die op die tijd gemaakt zijn. Deze staan in de database.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
echo "
<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">
  <tr>
    <td width=\"9%\"><strong>Uur</strong></td>
    <td width=\"91%\">&nbsp;</td>
  </tr>";

$dag= date('d');
$maand=date('m');
$jaar=date('Y');
$datum = $jaar .'-'.$maand.'-'. $dag;

$query_datum = "SELECT tijd FROM reserveringen  
WHERE datum = '$datum'";
$result_datum = mysql_query($query_datum);

$aBezet = array();

while($row= mysql_fetch_assoc($result_datum)) 
{ 
  $aBezet[] = $row['tijd']; 
} 

// alle tijden zitten nu in het array. 

// weergeven: 
for($tijd=800;$tijd<2400;$tijd=$tijd+50) 
{ 
  $uur = floor($tijd / 100); 
  $minuten = str_replace('50','30', $tijd%100); 

  if ( substr($minuten,-1, 1) == '0' ) 
{ 
$minuten = $minuten+'0'; 
}

  echo "<tr><td>$uur:$minuten</td>"; 
  if(in_array($uur .':'. $minuten, $aBezet)) 
  { 
    echo "<td bgcolor=\"red\"></td></tr>"; 
  } 
  else {
 echo "<td><a href=\"reserveren.php?tijd=$uur.$minuten&amp;datum=$datum\">Reserveer dit blok</a></td></tr>";   
  }
} 
echo "</table>";
?>

Acties:
  • 0 Henk 'm!

  • robbert
  • Registratie: April 2002
  • Laatst online: 11:40
Heb je uberhaupt wel de posts van -NMe- en mij gelezen? Of ben je gewoon zo eigenwijs?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Laten we het vriendlijk houden. Overigens zie ik niet hoe het feit dat de tijd uit een database komt een belemmering kan zijn voor de werking van je script. :?

[ Voor 17% gewijzigd door NMe op 09-07-2006 16:12 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • robbert
  • Registratie: April 2002
  • Laatst online: 11:40
Even wat tips dan maar:
• Werk overal met UNIX timestamps, dat is zoveel gemakkelijker. Sla gewoon alle reserveringen op in je database als datetime of timestamp en haal het eruit met de functie UNIX_TIMESTAMP.
• Gebruik vervolgens de eerste oplossing die ik bovenstaand heb gegeven, en je bent al bijna klaar. (Gezien ik daar ook UNIX-timestamps gebruik)

Gezien ik me dood verveel (je kan zelf dan wel bedenken hoe je je database tabel moet aanpassen neem ik aan):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$begin = strtotime("8:00");
$eind = strtotime("+1 day", strtotime("0:00"));

$query_datum = "SELECT UNIX_TIMESTAMP(datum) FROM reserveringen WHERE UNIX_TIMESTAMP(datum) >= ".$begin." AND UNIX_TIMESTAMP(datum) < ".$eind;
$result_datum = mysql_query($query_datum);

$aBezet = array();
while($row= mysql_fetch_assoc($result_datum))  
    $aBezet[] = $row["datum"];

for($i = $begin; $i < $eind; $i = strtotime("+30 minutes", $i)) {
    echo strftime("%H:%M",$i); 
    if(in_array($i, $aBezet)
       echo " is bezet<br />";
    else
       echo " is vrij<br />";   
}
?>

[ Voor 90% gewijzigd door robbert op 09-07-2006 16:30 ]

Pagina: 1