Kun teen while-silmukassa tietokantahaun:
while($rivi = mysql_fetch_array($haku)){ $muuttuja[] = $rivi[2]; }
Niin onko mahdollista, että saisin while-silmukan ulkopuolella jotenkin tulostettua kaikki $muuttuja-muuttujan alkiot? Nythän se tulostaa vain "Array"-tekstin (a) , tai sitten määritetyn indeksinumeron. esim:
Niinkuin varmaan tiesit, tuo $muuttuja on taulukko. Eli käytä jotain silmukkaa sen arvojen tulostukseen.
Suosittelen myös putkan php-oppaiden lukemista, niillä pääsee varsin hyvin alkuun.
No tuo ei vissiin kuitenkaan tulosta taulukon alkioita. Pikku editti tohon Irksomen vinkkiin:
Nyt pitäisi tulostua alkiot.
Pieni korjaus: Ei tulosta alkioita, vaan niiden alkioiden nimet (key) :P
Irksome kirjoitti:
<?php foreach($muuttuja as $arvo){ print $arvo."<br />"; } ?>
Tuo tulostaa alkiot (add: kaarisulkeet)
<?php foreach($muuttuja as $key => $arvo){ print $arvo."<br />"; } ?>
Tuokin tulostaa alkiot
Niin ja tämä tulostaa sekä alkion nimen että arvon:
:P:P
edit:Tulikohan asia selväksi??
Jo saatiin pikku asiasta iso kalabaliikki :) Eikö toi riittäny toi mun vastaus? :)
Ei oikein tullut selväksi. Tarkoitus oli, että tulos voidaan kokonaisuudessaan tulostaa ihan missävain. Eikä vain:
ko. tapauksessahan tulostus tapahtuu foreach-silmukan sisällä. jos nuo muuttujat yrittää tulostaa silmukan ulkopuolella, niin vastaukseksi saa vain viimeisen arvon.
Täh? Voithan sä tulostaa noi missä vaan. Jos yksittäistä alkiota kaipaat, tulostat esim. $muuttuja[3] ja saat taulukon neljännen alkion.
Nyt ei siis ole ilmeisesti kyse alkion arvon tulostamisesta, vaan alkion nimen tulostamisesta.
print $muuttuja[3]; tulostaa taulukon neljännen alkion arvon eikä alkion nimeä.
Sanokaa jos olen väärässä.
array array_keys ( array input [, mixed search_value])
array_keys() returns the keys, numeric and string, from the input array.
Elikkä esim.:
$muuttuja = array(...); $muuttuja_keys = array_keys($muuttuja);
Taitaa olla pientä sekaannusta siinä, mitä tarkoitin.
Tarkoituksena on siis ensin hakea tietokannasta löytyvät
arvot:
$haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!"); if ( mysql_num_rows( $haku ) ){ while($rivi = mysql_fetch_array($haku)){ // Tehdään taulukko nimeltä $muuttuja kaikista tietokannasta // saaduista arvoista. Muuttujat ovat viikon numeroita. $varatut[] = $rivi[2]; }
Tämän jälkeen luodaan lista viikoista loppuvuotena
//tämänhetkinen viikko $viikkonyt = date("W"); //vuoden viimeinen viikko $taavuosi = date("Y"); $viimeinenviikko = date("W", mktime(0, 0, 0, 12, 31, $taavuosi)); Sitten pitäisi saada alasvetovalikkoon tulostumaan kaikki ne viikot, joita ei ole tietokannassa: echo "<select name=viikko>"; //näytetään tämän vuoden loput viikot for ($viikko = $kuukausinyt; $viikko <= $viimeinenkuukausi; $viikko++) { echo "<option value=$viikko>viikko: $viikko"; } echo "</select></option>";
Ongelmana on nyt se, että jos käytän foreach-silmukkaa vaikkapa näin (tietokannassa on kolme arvoa tällä hetkellä, viikot 17,18 ja 19):
//näytetään tämän vuoden loput viikot for ($viikko = $kuukausinyt; $viikko <= $viimeinenkuukausi; $viikko++) { foreach ($varatut as $varattuviikko) if ($viikko != $varattuviikko) echo "<option value=$viikko>viikko: $viikko"; }
niin tulostuksesta tulee seuraavanlainen:
viikko: 15 viikko: 15 viikko: 15 viikko: 16 viikko: 16 viikko: 16 viikko: 17 viikko: 17 viikko: 18 viikko: 18 viikko: 19 viikko: 19
Eli siis ne viikot, jotka löytyvät kannasta tulee vain kaksi kertaa, mutta ne joita ei löydy kolme kertaa.
Sulla on kolme varattua viikkoa, 17, 18 ja 19. Sit käyt tuossa sisemmässä silmukassa ne kaikki varatut viikot läpi ja jos ei täsmää, tulostetaan tuo option. Eli se tulostaa silloin kolme kertaa (varattujen viikkojen lkm) tuon viikon. Ja jos taas löytyy niin silloin kaks kertaa (ei löydy kaks kertaa). Käytä sisemmän silmukan tilalla funktiota in_array(), joka tarkistaa löytyykö annettua arvoa taulukosta. Eli
<?php for($viikko=$kuukausinyt;$viikko<=$viimeinenkuukausi;$viikko++) { if(!in_array($viikko,$varatut)) echo "<option value='$viikko'>viikko: $viikko</option>\n"; } ?>
Edit: Kieltämättä hieman epäselvästi tosiaan selitit ekalla kerralla... :)
KIITOS!!!!! Nyt toimii juuri niinkuin pitää :)
KIITOS!!!!! Nyt toimii juuri niinkuin pitää :)
Eipäs toimikkaan ihan täysin. Jos arvoa ei tietokannasta löydy, niin silloin tulostaa että:
warning in_array(): wrong datatype for second argument in......line xx
Mitäs tähän tulisi tehdä?
No varmaan on hyvä kattoa ennen silmukkaa että onko siellä kannassa yhtään mitään ja jos on, onko enemmän ku yks. Ku jos siinä taulukossa on vaan yks arvo, ei se oo vielä taulukko.
Aihe on jo aika vanha, joten et voi enää vastata siihen.