Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: array, viimeinen tulos

manninen [27.02.2014 13:00:39]

#

Onko seuraava menetelmä järkevä hakea taulukon viimeinen tulos, vai onko tähän jokin järkevämpi toiminamalli?

$arr = explode(',',$r['11']);
$res = count($arr);

print $arr[$res-1];

Antti Laaksonen [27.02.2014 13:03:06]

#

Tuo on hyvä tapa.

groovyb [27.02.2014 13:03:51]

#

$last = end($arr);

manninen [27.02.2014 13:25:33]

#

Kiitos!

-tossu- [27.02.2014 22:54:12]

#

Kannattaa muistaa, että end siirtää taulukko-osoittimen viimeiseen elementtiin. Se saattaa tietyissä tapauksissa aiheuttaa hyvin erikoisia ongelmia. Seuraava esimerkki on kirjoitettu tämän Stack Overflow -kysymyksen vastauksen pohjalta.

Koodi poistaa taulukosta elementit, joiden arvo on sama kuin viimeisen elementin.

$arr = array("bar", "orange", "apple", "bar", "banana", "apple", "bar");

foreach ($arr as $k => $v) {
	if (end($arr) == $v)
		unset($arr[$k]);
}
echo join(" ", $arr); // tulostaa: orange apple banana apple

Koodi näyttää toimivan hyvin, joten muutetaan se poistamaan elementit, joita edeltävällä elementillä on sama arvo kuin viimeisellä. Tämä onnistuu helposti muuttamalla $arr[$k] muotoon $arr[$k+1]. Vieläkin kaikki tuntuu toimivan hyvin, ja koodi tulostaa "bar apple bar apple bar". Muualla koodissa tarvitaan osoitinta taulukkoon, joten luodaan sellainenkin.

$arr = array("bar", "orange", "apple", "bar", "banana", "apple", "bar");
$ref = &$arr;

foreach ($arr as $k => $v) {
	if (end($arr) == $v)
		unset($arr[$k + 1]);
}
echo join(" ", $arr);

Tässä yhteydessä ei liene vaikeaa arvata, ettei koodi tulosta ainakaan "bar apple bar apple bar".

The Alchemist [27.02.2014 23:44:34]

#

Tuollaiset hölmöydet vain todistavat sen, että php on loppuviimein kaukana aloittelijaystävällisestä kielestä ja myös että se on huonosti toteutettu.

Vastaus

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

Tietoa sivustosta