Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: taulukkomuuttuja kentistä

Sivun loppuun

B_R_H [29.01.2010 13:15:00]

#

Terve taas,

Tällä lyhyellä php kokemuksella törmäsi taas ongelmaan, josta en ehkä näe metsää puilta...

<?php
$taulu = 'nappi';
$kentta = 'sulje';
$nappi['sulje']='Sulje-näppäin';

echo $nappi['sulje']."\n"; //edellä sijoitettu arvo

//$arvo=$.$taulu.['.$kentta.']; // jotakin tallaista olen yrittämässä.

echo $arvo."\n";
?>

Eli haluaisin tehdä taulukkomuuttujan kahdesta muuttujan arvosta ja käyttää sillä tavalla löydettävää arvoa.

Kiitos etukäteen!

Blaze [29.01.2010 13:47:07]

#

Piti oikein kollektiivisesti pohtia, mitä mahdat tarkoittaa, ilmeisesti tätä:

$xd = 'hahaa';
$lol = 'xd';
echo $$lol; // tulostaa hahaa

Avainsana siis kaks dollarimerkkiä.

Gwaur [29.01.2010 13:55:21]

#

Tavoitteena on siis ilmeisesti käyttää muuttujan nimenä toisen muuttujan arvoa ja solun nimenä edelleen toisen muuttujan arvoa. Ensimmäisen Blaze jo kertoikin.

Tietynnimiseen tai -numeroiseen soluun voi viitata muuttujan arvolla ihan yksinkertaisesti näin: $taulukko[$solu].

B_R_H [29.01.2010 15:59:47]

#

Kiitti vastauksista.

Blaze:
En ihan tarkoittanut tuota.

Gwaur:
Juuri tuota tarkoitan - olin taas oma epäselvä itseni.

Näikö tarkoitat?
echo $taulu[$kentta];
Tämä lisättynä tuohon koodiin tulostaan vain n-kirjaimen?!

Tarkoitus on tehdä funktio, johon välitetään kaksi muuttajan arvoa eli
tässä pätkässä kovakoodattuna.
$taulu = 'nappi';
$kentta = 'sulje';

Näillä pyritään viittaammaan funtion sisäiseen taulukkoon ja siellä yhteen soluun, jonka arvo pitäisi saada tulostettua/talletetttua toiseen muuttujaan.

jcd3nton [29.01.2010 16:18:49]

#

Eihän $taulu ole mikään taulukko tuossa.
$nappi[$kentta] sen sijaan voisi toimia.
Jos taulun nimi halutaan hakea toisen muuttujan arvosta, Blaze antoi jo vastauksen.

Macro [29.01.2010 16:33:55]

#

<?php
$taulukko = array("solu1" => "arvo1", "solu2" => "arvo2", "solu3" => "arvo3");
$solu = "solu2";

echo $talukko[$solu]; // arvo2
?>

$taulu ei ole taulukko, vaan tekstimuuttuja. Voit tulostaa $taulu[1] komennolla $taulu muuttujan toisen merkin.

B_R_H [29.01.2010 16:37:56]

#

>Eihän $taulu ole mikään taulukko tuossa.
Näinpä, mutta tuo $nappi on.

Nämä taulukon nimi ja solu tulevat parametreina, mutta tässä erimerkissä oli vähän lyhennetty

<?php
function nimi($taulu,$kentta)
{
   require('automallit.php'); //
   return $taulu[$kentta];
}

//käyttö:
nimi("saab","99");
nimi("mersu","120");
<?php
//automallit.php
$saab["99"]="99 saab";
$saab["9000"]="saab 9000";
$volvo["V40"]="V40 volvo";
$volvo["440"]="Volvo 440";
$mersu["230E"]="E-series 230";
$mersu["120"]="120 Diesel";

Short Php [29.01.2010 16:42:57]

#

En ole koko threadia lukenut mutta return $taulu[$kentta]; --> return $$taulu[$kentta];

B_R_H [29.01.2010 17:06:35]

#

Short Php kirjoitti:

En ole koko threadia lukenut mutta return $taulu[$kentta]; --> return $$taulu[$kentta];

Näinkö tarkoitit?

<?php
function nimi($taulu,$kentta)
{
   require('automallit.php'); //
   return $$taulu[$kentta];
}
<?php
echo nimi("saab","99");
echo nimi("mersu","120");

Tulostuu blankkoja

Metabolix [29.01.2010 18:56:43]

#

<?php
$taulu = "saab";
echo ${$taulu}[$i];
# echo $saab[$i];

B_R_H [31.01.2010 11:27:47]

#

Kiitos taas Metabolix!

Hyvin toimii :-)
Osaako joku vielä kertoa, miten nämä {} vaikuttaa tuohon käsittelyyn?

Metabolix [31.01.2010 14:02:39]

#

Se vaikuttaa yksinkertaisesti laskujärjestykseen.

Sulkujen kanssa lasketaan ensin rakenne ${$taulu}, josta tulee siis ${"saab"} eli $saab, ja sitten otetaan tästä se yksi arvo, $saab[$i]. Näinhän sen pitikin toimia.

Ilman sulkuja lasketaan ensin koko loppuosa, $taulu[$i]. Koska $taulu sattuu olemaan teksti "saab", hakasulkumerkintä hakee siitä yhden merkin ja indeksiksi kelpaa vain luku. Niinpä PHP näppärästi muuttaa $i:n luvuksi, ja jos muunnos ei onnistu, tulos on 0. Niinpä $taulu[$i] on yleensä $taulu[0] eli "s", mutta jos $i olisi luku, tuloksena voisi olla myös "a" tai "b" tai "" (tyhjä). Koko lausekkeesta ${$taulu[$i]} jää siis ${"s"}, ${"a"}, ${"b"} tai ${""}, jolloin tuloksena on jokin näistä muuttujista tai huomautus muuttujan puuttumisesta ja null.

Tässä on vielä toisenlainen esitys jälkimmäisestä tapauksesta. Kaikki välivaiheet eivät ole validia PHP:tä, mutta idea selvinnee tästä joillekuille paremmin kuin edellisestä tekstistä.

<?php
$$taulu[$i]         # Lähtötilanne.
${$taulu[$i]}       # PHP:n arvaama laskujärjestys: $taulu[$i] ensin.
${"saab"[$i]}       # $taulu == "saab"
${"saab"[(int) $i]} # Tässä tilanteessa hakasuluissa on oltava luku.
${"saab"[0]}        # Jos $i ei ole kelvollinen luku, siitä tulee nolla.
${"s"}              # Tuloksena on "saab"-merkkijonon jokin merkki, [0] => "s".
$s                  # Se tulkitaan lopulta muuttujan nimeksi.

B_R_H [31.01.2010 17:49:35]

#

Hieno selitys - kiitos!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta