Gå til innhold

Roting med substrings og et spørsmål om looper


Anbefalte innlegg

Nå sitter jeg her og tuller med PHP igjen. Så kom den interresante problemstillingen opp:

 

1. Kan denne kodesnutten fungere?

 

$i = '0';
foreach ($File as $num => $line) {
$infoblock = explode(";", $line)
entry[$i] = $infoblock;
$i++
}

Hva vil jeg da få ut av denne loopen?

 

2. Tanken med koden over var å få ut flere $infoblock[n] enn en, dvs. å unngå at denne ble overskrevet hver gang loopen fulførte en runde og heller lagre resultatene i $entry[n].

 

La oss no si at koden fungerte slik som jeg ønsket. Hvordan kan jeg benytte loops for å plukke ut alle $infoblock[2] bitene i $entry[n] som inneholder la oss si 7?

 

Håper dette var forståelig.. Hvis ikke må jeg reformulere meg.

 

EDIT: lefi

Endret av MBaardsgaard
Lenke til kommentar
Videoannonse
Annonse

Hva er substring problemet som du skrev i overskriften?

 

1.

Problemet med den koden er at du skriver: entry[... det skal være $entry.

Videre er

$array[] = 1;

$array[] = 2;

 

det samme som:

$array[0] = 1;

$array[1] = 2;

 

som da blir det samme som:

$i = 0;

$array[$i] = 1;

$i++;

$array[$i] = 2;

 

$i = '0';
foreach ($File as $num => $line) {
$infoblock = explode(";", $line)
entry[$i] = $infoblock;
$i++

Skriver du da slik:

foreach ($File as $num => $line) {
$infoblock = explode(";", $line)
entry[] = $infoblock;

 

Videre så bruker du ikke $num så det holder med foreach($File as $line).

 

2.

Siden du allerede bruker foreach så kan du fortsette med det.

F.eks.

foreach($entry as $var)

echo $var[7];

Lenke til kommentar

Jeg får parse error. Koden jeg satte inn hvis jeg forstår deg rett..?

 

$manedidag = explode(',', date(m,F,Y,t));
$dagerimaned = date('t');
$File = file('data.dat');
foreach ($File as $line) {
$infoblock = explode(";", $line);
entry[] = $infoblock; \\Denne linjen får parse error..
foreach($entry as $var){
echo $var[8];
}
}

 

Vet ikke om du misforsto, men tanken er å trekke ut alle entry[] blokkene som inneholder $infoblock[2] = '7';

Endret av MBaardsgaard
Lenke til kommentar

Skjønnar ikkje heilt kva du meiner med søket du beskriv i fyrste post, men feilen er at du ikkje har $ før entry[]

 

test.php

<?
$File = file('data.dat');
foreach ($File as $line) {
$infoblock = explode(";", $line);
$entry[] = $infoblock;
foreach($entry as $var){
 echo $var[0]." | ".$var[1];
 echo"<br />";
}
echo"<br />";
}
?>

data.dat

Ein;1
To;2
Tri;3
Fire;4

Resultat:

Ein | 1 

Ein | 1 
To | 2 

Ein | 1 
To | 2 
Tri | 3 

Ein | 1 
To | 2 
Tri | 3 
Fire | 4

Håpar det hjalp litt.

Endret av Slaughter
Lenke til kommentar

EDIT: Hurra! jeg fikk det til alene! Nå er kanlenderen min komplett! Hvis noen er interessert, har jeg koden under:

 

<?php


function datasplit ($input) {
   $array = explode(".", $input);
   $output['dag'] = trim($array[0]);
   $output['maned'] = trim($array[1]);
   $output['ar'] = trim($array[2]);
$output['data'] = trim($array[3]);
   return $output;
}
$dagidag = date('j');
$manedidag = date('m');
$bmanedidag = date('F');
$aridag = date('Y');
$dagerimaned = date('t');
if ($dagerimaned == '28') {
$day = array(0,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);
}
if ($dagerimaned == '30') {
$day = array(0,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);
}
if ($dagerimaned == '31') {
$day = array(0,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);
}
$File = file('data.dat');
foreach ($File as $num => $line) {
$infoblock[$num] = datasplit($line);
if ($infoblock[$num]['maned'] == $manedidag AND $infoblock[$num]['ar'] == $aridag) {
$curday = $infoblock[$num]['dag'];
$daydata = $infoblock[$num]['data'];
$day[$curday] = "<acronym title=\"$daydata\">$curday</acronym>";
if ($curday == $dagidag) {
$day[$curday] = "<strong><acronym title=\"$daydata\">$curday</acronym></strong>";
}
}
}
echo "
<p>$bmanedidag, $aridag</p>
<table>
<tr><td>M</td><td>T</td><td>O</td><td>T</td><td>F</td><td>L</td><td>S</td></tr>
<tr><td>$day[1]</td><td>$day[2]</td><td>$day[3]</td><td>$day[4]</td><td>$day[5]</td><td>$day[6]</td><td>$day[7]</td></tr>
<tr><td>$day[8]</td><td>$day[9]</td><td>$day[10]</td><td>$day[11]</td><td>$day[12]</td><td>$day[13]</td><td>$day[14]</td></tr>
<tr><td>$day[15]</td><td>$day[16]</td><td>$day[17]</td><td>$day[18]</td><td>$day[19]</td><td>$day[20]</td<td>$day[21]</td></tr>
<tr><td>$day[22]</td><td>$day[23]</td><td>$day[24]</td><td>$day[25]</td><td>$day[26]</td><td>$day[27]</td><td>$day[28]</td></tr>
<tr><td>$day[29]</td><td>$day[30]</td><td>$day[31]</td></tr>
</table>";
?>

 

Jeg har også en testversjon på nett..Link

 

Jeg har problemer med en praktisk måte å Lage $day arrayen og endte omm med tre store if setninger. Hvis noen har en bedre måte å generere dagene på, hadde det vært fint.

Endret av MBaardsgaard
Lenke til kommentar

veldig knotete måte å legge opp html!

 

prøv noe som dette:

ps: skriver ikke hele koden din på nytt bare fra der hvor du skriver "echo"tabeller her... $day[1]...$day[2]osv osv osv";

 

$content = "<tr>";
$i = 1;
foreach($day as $dag){
$content .= "\n\t<td>$dag</td>";
$content .= ($i%7) ? "\n</tr><tr>\n\t" : "";
$i++;
}
$content .= "</tr>";

 

ikke helt sikker på om det fungerer da jeg ikke har tid før senere i dag til å teste, men kort fortalt printer den ut alle datoene og hopper til ny rad etter hver 7 dag, men er en stund siden jeg gjorde dette så kan tenkes at det ble litt feil...

 

hvis du får den til å fungere kan du også legge alle ukedagene i ett array og printe de ut på samma måten så du slipper å skrive

<td>man</td><td>tir</td> osv osv

Endret av magikern
Lenke til kommentar

Koden din fungerte ikke.. Jaja.. da får jeg mekke videre selv. *pønske ut alternativer til tabeller*

EDIT: Jeg gidder ikke å stresse med kode jeg ikke skjønner..

$content .= "<table>\n\t<tr>";
$i = 0;
foreach($day as $dag){
$content .= "<td>$dag</td>\n\t";
if ($i == 7) {
$i = 0;
$content .= "</tr>\n<tr>\n\t";
}
$i++;
}
$content .= "</tr>\n\t</table>";
$content = str_replace("<td>0</td>", "", $content);
echo $content;

Sånn :roll:

Endret av MBaardsgaard
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...