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!
Piti oikein kollektiivisesti pohtia, mitä mahdat tarkoittaa, ilmeisesti tätä:
$xd = 'hahaa'; $lol = 'xd'; echo $$lol; // tulostaa hahaa
Avainsana siis kaks dollarimerkkiä.
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]
.
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.
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.
<?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.
>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";
En ole koko threadia lukenut mutta return $taulu[$kentta]; --> return $$taulu[$kentta];
Short Php kirjoitti:
En ole koko threadia lukenut mutta return $taulu[$kentta]; --> return $$taulu[$kentta];
Näinkö tarkoitit?
Tulostuu blankkoja
<?php $taulu = "saab"; echo ${$taulu}[$i]; # echo $saab[$i];
Kiitos taas Metabolix!
Hyvin toimii :-)
Osaako joku vielä kertoa, miten nämä {} vaikuttaa tuohon käsittelyyn?
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.
Hieno selitys - kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.