Avatar billede saj Nybegynder
29. juli 2003 - 00:50 Der er 22 kommentarer og
1 løsning

while tager for lang tid

hvordan kan det være at min while tager for lang tid? jeg har endda kortet den ned så det kun er den skal tjeke:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php

$dato_ar = time();
$dato = $dato_ar["mday"]."/".$dato_ar["mon"]."-".$dato_ar["year"];

//mønsted
$mfe[1] = "8/8-2003";
/*$mfe[2] = "5/9-2003";
$mfe[3] = "3/10-2003";
$mfe[4] = "7/11-2003";
$mfe[5] = "5/12-2003";
//hald
$hfe[1] = "29/8-2003";
$hfe[2] = "26/9-2003";
$hfe[3] = "24/10-2003";
$hfe[4] = "21/11-2003";
//krejbjerg
$kfe[1] = "8/8-2003";
$kfe[2] = "5/9-2003";
$kfe[3] = "10/10-2003";
$kfe[4] = "7/11-2003";
*/
$nr = 1;
while ($mfe[nr] < dato || $mfe[nr] != ""){
$nr = $nr + 1;
}
echo "næste Mønsted er: ";
echo $mfe[$nr];

echo "<br>";
/*
$nr = 1;
while ($hfe[$nr] < dato){
$nr = $nr + 1;
}
echo "næste Hald er: ";
echo $hfe[$nr];

echo "<br>";

$nr = 1;
while ($kfe[$nr] < dato){
$nr = $nr + 1;
}
echo "næste Krejbjerg er: ";
echo $kfe[$nr];
*/
?>
</body>
</html>
Avatar billede jpvj Nybegynder
29. juli 2003 - 00:53 #1
Du kommer nok aldrig ud af din while løkke.

Prøv at lave nogle simple echo sætninger, der udskriver ex. ($mfe[nr] < dato) og ($mfe[nr] != "")... vælg værdier for nr, så du kommer ud over dit array (ex. nr = 5).

Du vil nok finde ud af at mindst 1 af udstrykkene er sand...

JP
Avatar billede saj Nybegynder
29. juli 2003 - 00:59 #2
koden vil jo blive en del kortere og mere overskuelig hvis den er lavet med en while løkke, frem for at jeg skal side at skrive hver if... er det evt muligt at lave en case lige som i c++?
Avatar billede Slettet bruger
29. juli 2003 - 01:02 #3
Avatar billede jpvj Nybegynder
29. juli 2003 - 01:02 #4
Nej - du skal bare lave følgende

for (int $nr=1; $nr++; $nr<=6) {
  echo "Test af $nr: "
  echo ($mfe[nr] < dato)
  echo " "
  echo ($mfe[nr] != "")
  echo "<br>
}

eller hvordan nu en for løkke ser ud i PHP.

Du remmer så lige dine while løkker ud, så de ikke driller.
Avatar billede mixeren Nybegynder
29. juli 2003 - 01:03 #5
Kender ikke rigtig til c++, men er det en switch -> case -> break du tænker på? Så burde denne kunne hjælpe http://dk2.php.net/manual/en/control-structures.switch.php
Avatar billede saj Nybegynder
29. juli 2003 - 01:06 #6
nu har jeg prøvet at lave lidt om...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php

$dato_ar = time();
$dato = $dato_ar["mday"]."/".$dato_ar["mon"]."-".$dato_ar["year"];

//mønsted
$mfe[1] = "8/8-2003";
/*$mfe[2] = "5/9-2003";
$mfe[3] = "3/10-2003";
$mfe[4] = "7/11-2003";
$mfe[5] = "5/12-2003";
//hald
$hfe[1] = "29/8-2003";
$hfe[2] = "26/9-2003";
$hfe[3] = "24/10-2003";
$hfe[4] = "21/11-2003";
//krejbjerg
$kfe[1] = "8/8-2003";
$kfe[2] = "5/9-2003";
$kfe[3] = "10/10-2003";
$kfe[4] = "7/11-2003";
*/
$nr = 1;
while ($mfe[nr] < dato)||($nr <= 5){
$nr = $nr + 1;
}
echo "næste Mønsted er: ";
echo $mfe[$nr];

echo "<br>";
/*
$nr = 1;
while ($hfe[$nr] < dato){
$nr = $nr + 1;
}
echo "næste Hald er: ";
echo $hfe[$nr];

echo "<br>";

$nr = 1;
while ($kfe[$nr] < dato){
$nr = $nr + 1;
}
echo "næste Krejbjerg er: ";
echo $kfe[$nr];
*/
?>
</body>
</html>

men nu får jeg en fejl der siger:

Parse error: parse error, unexpected T_BOOLEAN_OR in /disk2/users/soeren/date.php on line 31
Avatar billede jpvj Nybegynder
29. juli 2003 - 01:14 #7
Hvis du skal sammenligne datoer, så vil jeg tro at du skal bruge et bedre format end det du anvender...

ex. 2003-05-30 (altså YYYY-MM-DD)

Alternativt kan du konvertere din streng til et timestamp, men det er vist en smagssag.

JP
Avatar billede saj Nybegynder
29. juli 2003 - 01:15 #8
jpvj hvordan gør jeg det??
Avatar billede jpvj Nybegynder
29. juli 2003 - 01:19 #9
gør hvad?
Avatar billede jpvj Nybegynder
29. juli 2003 - 01:20 #10
Avatar billede saj Nybegynder
29. juli 2003 - 01:20 #11
laver datoen om til timestamp eller hvad der nu er bedst. jeg er ligt noob inden for php...
Avatar billede saj Nybegynder
29. juli 2003 - 01:25 #12
arh:
$today = date('j-n-Y');
echo $today;
Avatar billede jpvj Nybegynder
29. juli 2003 - 01:26 #13
Avatar billede saj Nybegynder
29. juli 2003 - 01:28 #14
nu har jeg lavet det om til en for løkke:

for($nr = 0;;$nr++){
if ($mfe[$nr] >= dato){
    break;
    echo $mfe[$nr];}
else{
    break;
    echo "der er ikke flere datoer på Mønsted!";}
}

og brugt date funktionen i stedet, men den skriver ikke noget ud :(
Avatar billede saj Nybegynder
29. juli 2003 - 01:35 #15
jeg har set at der ikke $ foran date men det hjælper heller ikke noget når jeg retter det...
Avatar billede jpvj Nybegynder
29. juli 2003 - 01:44 #16
2 min ... skal lige have noget PHP op og køre på IIS... Har ikke lige adgang til en Apache/PHP pt.
Avatar billede saj Nybegynder
29. juli 2003 - 01:49 #17
okay
Avatar billede jpvj Nybegynder
29. juli 2003 - 01:55 #18
He-he... piece of cake... det kører sg'
Avatar billede saj Nybegynder
29. juli 2003 - 02:01 #19
nu virke den!! :)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php

$dato_ar = time();
$dato = date('j-n-Y');

//mønsted
$mfe[1] = "8-8-2003";
$mfe[2] = "5-9-2003";
$mfe[3] = "3-10-2003";
$mfe[4] = "7-11-2003";
$mfe[5] = "5-12-2003";
/*//hald
$hfe[1] = "29/8-2003";
$hfe[2] = "26/9-2003";
$hfe[3] = "24/10-2003";
$hfe[4] = "21/11-2003";
//krejbjerg
$kfe[1] = "8/8-2003";
$kfe[2] = "5/9-2003";
$kfe[3] = "10/10-2003";
$kfe[4] = "7/11-2003";
*/
$nr = 1;
do{
echo $mfe[$nr];
$nr = $nr + 1;
}while ($mfe[$nr] < $dato);
$nr = $nr - 1;
echo "næste Mønsted er: ";
echo $mfe[$nr];

echo "<br>";
/*
for($nr = 0;;$nr++){
if ($mfe[$nr] >= $dato || $nr > 5){
    break;
    echo $mfe[$nr];}
else{
    break;
    echo "der er ikke flere datoer på Mønsted!";}
}

$today = date('j-n-Y');
echo $today;


$nr = 1;
while ($hfe[$nr] < dato){
$nr = $nr + 1;
}
echo "næste Hald er: ";
echo $hfe[$nr];

echo "<br>";

$nr = 1;
while ($kfe[$nr] < dato){
$nr = $nr + 1;
}
echo "næste Krejbjerg er: ";
echo $kfe[$nr];
*/
echo "<br>";
echo "<br>";

if ($dato == $dato1)
echo $dato1;
elseif($dato <= $dato2)
echo $dato2;
?>
</body>
</html>
Avatar billede tjp Mester
29. juli 2003 - 02:04 #20
>> saj 01:06

Kunne fejlen i linie 31 ikke skyldes at du mangler en yderparantes i:
  while  ($mfe[nr] < dato)||($nr <= 5)

Skulle der ikke stå:
  while (($mfe[nr] < dato)||($nr <= 5))
i stedet for?
Avatar billede jpvj Nybegynder
29. juli 2003 - 02:07 #21
Her er et lille eksempel, der finder den sidste dato for mønsted. Fjern selv debug output...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/s\
trict.dtd">
<HTML>
<HEAD>
<TITLE>PHP test.</TITLE>
</HEAD>

<BODY>
</BODY>

<?php
$today = date('j-n-Y');
echo "I dag: ".$today."<BR>";

$mfe[1]= strtotime("2003-5-5");
$mfe[2]= strtotime("2003-8-8");

$nr=1;
for (;;$nr++) {
  echo "nr: $nr <BR>";
  if ($mfe[$nr] >= $today){
      echo strftime("%Y-%m-%d", $mfe[$nr])."<BR>";
  }
  else{
      echo "der er ikke flere datoer på mønsted<BR>";
      break;
  }
}
echo "Den sidste dato på Mønsted er ".strftime("%Y-%m-%d", $mfe[$nr-1])."<BR>";

?>

</BODY>
</HTML>
Avatar billede saj Nybegynder
29. juli 2003 - 02:17 #22
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php

$dato_ar = time();
$dato = date('j-n-Y');

//mønsted
$mfe[1] = "8-8-2003";
$mfe[2] = "5-9-2003";
$mfe[3] = "3-10-2003";
$mfe[4] = "7-11-2003";
$mfe[5] = "5-12-2003";
//hald
$hfe[1] = "29-8-2003";
$hfe[2] = "26-9-2003";
$hfe[3] = "24-10-2003";
$hfe[4] = "21-11-2003";
//krejbjerg
$kfe[1] = "8-8-2003";
$kfe[2] = "5-9-2003";
$kfe[3] = "10-10-2003";
$kfe[4] = "7-11-2003";

$nr = 0;
do{
$nr = $nr + 1;
}while ($mfe[$nr] < $dato);
echo "næste Mønsted er: ";
echo $mfe[$nr];

echo "<br>";
/*
for($nr = 0;;$nr++){
if ($mfe[$nr] >= $dato || $nr > 5){
    break;
    echo $mfe[$nr];}
else{
    break;
    echo "der er ikke flere datoer på Mønsted!";}
}

$today = date('j-n-Y');
echo $today;
*/

$nr = 0;
do{
$nr = $nr + 1;
echo $hfe[$nr];
}while (($hfe[$nr] < $dato) || ($nr != 6));
echo "næste Hald er: ";
echo $hfe[$nr];

echo "<br>";

$nr = 0;
do{
$nr = $nr + 1;
}while ($kfe[$nr] < $dato);
echo "næste Krejbjerg er: ";
echo $kfe[$nr];

echo "<br>";
echo "<br>";

if ($dato == $dato1)
echo $dato1;
elseif($dato <= $dato2)
echo $dato2;
?>
</body>
</html>

hvordan kan det være at hald den ikke stopper når den har over skredet datoen, det gør både mønsted og krejbjerg...
Avatar billede saj Nybegynder
29. juli 2003 - 02:20 #23
jeg ved ikke hvad der sker får den men nu virker den igen...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>
<?php

$dato_ar = time();
$dato = date('j-n-Y');

//mønsted
$mfe[1] = "8-8-2003";
$mfe[2] = "5-9-2003";
$mfe[3] = "3-10-2003";
$mfe[4] = "7-11-2003";
$mfe[5] = "5-12-2003";
//hald
$hfe[1] = "29-8-2003";
$hfe[2] = "26-9-2003";
$hfe[3] = "24-10-2003";
$hfe[4] = "21-11-2003";
//krejbjerg
$kfe[1] = "8-8-2003";
$kfe[2] = "5-9-2003";
$kfe[3] = "10-10-2003";
$kfe[4] = "7-11-2003";

$nr = 0;
do{
$nr = $nr + 1;
}while ($mfe[$nr] < $dato);
echo "næste Mønsted er: ";
echo $mfe[$nr];

echo "<br>";
/*
for($nr = 0;;$nr++){
if ($mfe[$nr] >= $dato || $nr > 5){
    break;
    echo $mfe[$nr];}
else{
    break;
    echo "der er ikke flere datoer på Mønsted!";}
}

$today = date('j-n-Y');
echo $today;
*/

$nr = 0;
do{
$nr = $nr + 1;
}while ($hfe[$nr] < $dato);
echo "næste Hald er: ";
echo $hfe[$nr];

echo "<br>";

$nr = 0;
do{
$nr = $nr + 1;
}while ($kfe[$nr] < $dato);
echo "næste Krejbjerg er: ";
echo $kfe[$nr];

echo "<br>";
echo "<br>";

if ($dato == $dato1)
echo $dato1;
elseif($dato <= $dato2)
echo $dato2;
?>
</body>
</html>

du skal have 1000 tak for hjælpen, jeg vil til at i seng, min mor bliver bare sur hvis jeg sider oppe til kl 5 igen i nat...

nå ja, du(jpvj) får self alle point'ene...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB