Onko seuraava menetelmä järkevä hakea taulukon viimeinen tulos, vai onko tähän jokin järkevämpi toiminamalli?
Tuo on hyvä tapa.
$last = end($arr);
Kiitos!
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".
Tuollaiset hölmöydet vain todistavat sen, että php on loppuviimein kaukana aloittelijaystävällisestä kielestä ja myös että se on huonosti toteutettu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.