tantenMedlem sedan nov. 20051 658 inlägg
Nu börjar jag bli sååå trött på den här tabellen. Har tagit tag i den igen, finns även i en annan tråd, men där med andra frågor också. Har nu försökt igen i flera dagar att få den att fungera. Men jag kan inte. Snälla någon... HJÄLP!
for ($i = 2006; $i <= date('Y'); $i++)
{
echo('<tr><td>'. $i .'</td>');//årtalet skrivs ut. Bli rätt.
for ($j = 0; $j < 8; $j++)
{
echo('<td>');
if (isset($result[$i][$j]))
echo($result[$i][$j]);
else
echo("0");//antal placeringar i 8 kolumner. Blir rätt.
echo ("</td>\n");
}
/*
problemet kommer här:
vid utskrift print_r så finns det;
Array (
[0] => Array ( [pris] => 180250 [0] => 180250 [theYear] => 2006 [1] => 2006 )
[1] => Array ( [pris] => 151500 [0] => 151500 [theYear] => 2007 [1] => 2007 )
)
som ska in här:*/
echo "<td class=\"hoger\"> $pengar </td></tr>\n";
//Som koden är nu så blir det 151500 för både 2006 och 2007
}
//print_r($resultat); //skriver ut som beskrivet ovan.
//print_r($pengar); //skriver ut 151500
?>
flyttade på </tr>som var fel
i2n2Medlem sedan jan. 2007175 inlägg
Hmm...
Om jag tolkar ditt problem så har du en "konstig" array och vill plocka ut 'pris' för olika 'theYear'.
Denna kod kanske simulerar kärnan i ditt problem om min tolkning är rätt.
#!/usr/bin/php
<?php
/*
problemet kommer här:
vid utskrift print_r så finns det;
Array (
[0] => Array ( [pris] => 180250 [0] => 180250 [theYear] => 2006 [1] => 2006 )
[1] => Array ( [pris] => 151500 [0] => 151500 [theYear] => 2007 [1] => 2007 )
)
som ska in här:*/
$resultat = array( 0 => array('pris' => 180250, 0 => 180250, 'theYear' => 2006, 1 => 2006),
1 => array('pris' => 151500, 0 => 151500, 'theYear' => 2007, 1 => 2007));
print_r($resultat); //skriver ut det som du beskriver ovan.
for ($i = 2006; $i <= date('Y'); $i++)
{
$count = count($resultat);
for ($k = 0; $k < $count; $k++)
{
if ($resultat[$k][theYear] == $i)
{
echo "i: ".$i." k: ".$k." pris: ".$resultat[$k][pris]." theYear: ".$resultat[$k][theYear]."\n";
} else {
echo "i: ".$i." k: ".$k."\n";
}
}
}
?>
tantenMedlem sedan nov. 20051 658 inlägg
Jag testade ditt förslag och gjorde så bara summan skulle skrivas ut eftersom året skrivs ut tidigare men då blev problemet det omvända.
Då kördes en loop, men sedan kördes inte 2007 från början, utan summan skrevs bara ut och då lite konstigt. Jag förstår inte hur man ska kunna köra 2 loopar för ett år i taget. Men kanske är vi på rätt väg. Skriver ut källkoden för båda våra...
<tr>
<td>2006</td>
<td>14</td>
<td>2</td>
<td>6</td>
<td>3</td>
<td>3</td>
<td>7</td>
<td>5</td>
<td>0</td>
<td>180250
</td></tr>
</td></tr>
<td>151500
stoppade här...
Och med koden jag hade.
<tr><td>2006</td>
<td>14</td>
<td>2</td>
osv...samma som din
<td class="hoger"> 151 500 </td> (ska vara 180 250)
</tr>
<tr>
<td>2007</td>
<td>8</td>
<td>2</td>
osv...
<td class="hoger"> 151 500 </td></tr>
Så jag antar att en kombination av de båda kanske skulle kunna fungera.
i2n2Medlem sedan jan. 2007175 inlägg
Mitt problem är att jag inte kan se och förstår vad som verkligen finns i $result och $pengar (det råder nog viss förvirring om vad som är vad). Kan du skriva ut dessa?
Min ide, som byggde på vad som fanns i kommentarerna i din kod, var att du har en yttre vektor med två element och att dessa två elementen innehåller var sin inre vektor med vardera fyra element (egentligen ser dessa fyra ut det som två som är dubblerade). Eftersom den yttre inte innehåller årtal som "key" utan har heltal (0-1) som index måste man loopa genom den yttre vektorns element (min $k loop) för att leta reda på rätt årtal och när man hittat rätt årtal med hjälp av detta index plocka ut rätt 'pris'.
tantenMedlem sedan nov. 20051 658 inlägg
Hoppas att det blir lite tydligare nu... om inte säg till
result ger utskriften
print_r($result)
Array
(
[0] => Array
(
[placering] => 0
[0] => 0
[antal] => 14
[1] => 14
[theYear] => 2006
[2] => 2006
)
[1] => Array
(
[placering] => 1
[0] => 1
[antal] => 2
[1] => 2
[theYear] => 2006
[2] => 2006
)
[2] => Array
(
[placering] => 2
[0] => 2
[antal] => 6
[1] => 6
[theYear] => 2006
[2] => 2006
)
osv tog bort 3 till 13 för att korta ner det här
[13] => Array
(
[placering] => 6
[0] => 6
[antal] => 3
[1] => 3
[theYear] => 2007
[2] => 2007
)
[14] => Array
(
[placering] => 7
[0] => 7
[antal] => 1
[1] => 1
[theYear] => 2007
[2] => 2007
)
[2006] => Array
(
[0] => 14
[1] => 2
[2] => 6
[3] => 3
[4] => 3
[5] => 7
[6] => 5
)
[2007] => Array
(
[0] => 8
[1] => 2
[2] => 1
[3] => 3
[4] => 3
[5] => 4
[6] => 3
[7] => 1
)
)
$pengar är egentligen omformatering av summan. Koden i den filen ser ut som så
$vinn = $dbh->prepare('SELECT sum( prisSumma ) AS pris, year( l.datum ) AS theYear
FROM resultat r, lopp l
WHERE r.loppID = l.loppID
AND year( l.datum ) >=2006
GROUP BY theYear ');
unset($dbh);
$vinn->execute();
$resultat = $vinn->fetchAll();
foreach($resultat as $vinst);
$pengar = number_format($vinst['pris'], 0, '', ' ');
print_r ($resultat)
Array
(
[0] => Array
(
[pris] => 180250
[0] => 180250
[theYear] => 2006
[1] => 2006
)
[1] => Array
(
[pris] => 151500
[0] => 151500
[theYear] => 2007
[1] => 2007
)
)
print_r ($pengar) blir bara 151 500
fiddlerMedlem sedan juli 20022 464 inlägg
foreach($resultat as $vinst); bör nog inte avslutas med ett semikolon...
tantenMedlem sedan nov. 20051 658 inlägg
Ingen skillnad utan ; utskrift blir också bara en summa som förut.
i2n2Medlem sedan jan. 2007175 inlägg
Att $pengar hela tiden blir 'pris' elementet för sista elementet i $resultat vektorn beror ju på att det är det du sätter det till det i foreach-satsen.
Gör du
foreach($resultat as $vinst)
$pengar = number_format($vinst['pris'], 0, '', ' ');
resten av koden
men tror att du gör
foreach($resultat as $vinst)
{
$pengar = number_format($vinst['pris'], 0, '', ' ');
resten av koden
}
dvs tror att du är inne i foreach blocket när du gör resten av koden.
tantenMedlem sedan nov. 20051 658 inlägg
Har flyttat och lagt till måsvingar eller semikolons flera dagar nu och det blir bara antingen en summa eller bägge. Som här t.ex. Då de kommer de tillsammans. Blir tokig... Så hur tar jag mig ur blocket?
<tr><td>2006</td><td>14</td>
<td>2</td>
<td>6</td>
<td>3</td>
<td>3</td>
<td>7</td>
<td>5</td>
<td>0</td>
<td class="hoger"> 180 250 </td></tr>
<td class="hoger"> 151 500 </td></tr>
<tr><td>2007</td><td>8</td>
<td>2</td>
<td>1</td>
<td>3</td>
<td>3</td>
<td>4</td>
<td>3</td>
<td>1</td>
<td class="hoger"> 180 250 </td></tr>
<td class="hoger"> 151 500 </td></tr>
Då med denna kod..
Flyttat in några rader från en annan fil nu för att få måsvingarna tydligare.
for ($i = 2006; $i <= date('Y'); $i++)
{
echo('<tr><td>'. $i .'</td>');
for ($j = 0; $j < 8; $j++)
{
echo('<td>');
if (isset($result[$i][$j]))
echo($result[$i][$j]);
else
echo("0");
echo ("</td>\n");
}
{
foreach($resultat as $vinst)
{
$pengar = number_format($vinst['pris'], 0, '', ' ');
echo "<td class=\"hoger\"> $pengar </td></tr>\n";
}
}
}
i2n2Medlem sedan jan. 2007175 inlägg
foreach($resultat as $vinst)
{
$pengar = "error - no value for ". $i; // inte mycket till felhantering men....
if ($vinst['theYear'] == $i)
{
$pengar = number_format($vinst['pris'], 0, '', ' ');
echo "<td class=\"hoger\"> $pengar </td></tr>\n";
}
}
Vilket i princip är samma sak med en foreach- + if-sats som min ursprungliga förslag med en for- + if-sats för att få tag i rätt 'pris'.
tantenMedlem sedan nov. 20051 658 inlägg
Där satt den! Men så skönt...
Felhanteringen ska jag försöka klura ut hur jag ska göra, för där behövs en 0:a 1:a januari och fram tills det kommit in pengar igen.
Tack så JÄTTEmycket för din hjälp!