tyyppi = $tyyppi; } // destruktori function __destruct() { $this->tyyppi = NULL; $this->lista_alkiot = NULL; } // metodi palauttaa listan tyypin public function anna_tyyppi() { return $this->tyyppi; } // metodi lisää alkion, jos sitä ei ollut olemassa public function lisaa_alkio($alkio) { if(!$this->onko_olemassa($alkio->anna_arvo())) { array_push($this->lista_alkiot, $alkio); return true; } return false; } // metodi lisää alkion, olemassaoloa ei tarkisteta public function lisaa_alkio_temp($alkio) { if(array_push($this->lista_alkiot, $alkio)) { return true; } else { return false; } } // metodi poistaa alkion taulukosta public function poista_alkio($arvo) { foreach($this->lista_alkiot as $indeksi => $alkio) { if($alkio->anna_arvo() == $arvo) { unset($this->lista_alkiot[$indeksi]); return true; } } return false; } // metodi päivittää parametrina tuodun alkion // myös uusi arvo tuodaan parametrina // paivitys voi olla myös lisäys // tarkistuksia ei tehdä, koska listan ehjyys tarkistetaan erikseen // lisays tehdään silloin, jos paivitettävää alkiota ei löydy public function paivita_alkio($paivitettava,$uusi_arvo) { foreach($this->lista_alkiot as $indeksi => $alkio) { if($alkio->anna_arvo() == $paivitettava) { $this->lista_alkiot[$indeksi]->aseta_arvo($uusi_arvo); return true; } } $uusi_alkio = new lista_alkio($uusi_arvo); return $this->lisaa_alkio_temp($uusi_alkio); } // metodi muuttaa listan tyyppiä public function muuta_tyyppi($uusi_arvo) { $this->tyyppi = $uusi_arvo; } // metodi tarkistaa alkion olemassaolon public function onko_olemassa($alkion_arvo) { foreach($this->lista_alkiot as $alkio) { if($alkio->anna_arvo() == $alkion_arvo) return true; } return false; } // metodi tarkistaa onko lista-alkioiden taulukko ehjä // etsitään siis mahdollisia päällekkäisyyksiä public function tarkista_ehjyys() { $alkuperaiset_arvot = $this->anna_arvot(); // array_unique palauttaa taulukon, josta on poistettu // mahdolliset dublikaattiarvot $temppitaulukko = array_unique($alkuperaiset_arvot); // array_diff_assoc palauttaa taulukon, jossa on parametrina // tuotavien taulukoiden arvot, jotka eroavat toisistaan $muuttunut2 = array_diff_assoc($alkuperaiset_arvot,$temppitaulukko); // lasketaan eroavaisuustaulukon kenttien määrä $muuttunut = count($muuttunut2); // jos löytyi yksikin, niin eroavaisuutta oli, eli taulukko ei ole ehjä if($muuttunut>0) { return false; } else { return true; } } // kahden alkion järjestämisen hoitava metodi // muutetaan kaikki pieniksi kirjaimiksi, niin se ei tuota ongelmia private function jarjesta($a,$b) { if(strtolower($a->anna_arvo()) == strtolower($b->anna_arvo())) { return 0; } return (strtolower($a->anna_arvo()) < strtolower($b->anna_arvo())) ? -1 : 1; } // metodi järjestää listan usort-funktion avulla, // joka osaa käsitellä myös olioita ja jolle saa // antaa oman järjestämismetodin public function jarjesta_lista() { return usort($this->lista_alkiot,array("Lista","jarjesta")); } // metodi palauttaa taulukkona kaikkien lista-alkioiden sisällöt public function anna_arvot() { $arvotaulukko = array(); foreach($this->lista_alkiot as $alkio) { $arvo = $alkio->anna_arvo(); array_push($arvotaulukko,$arvo); } return $arvotaulukko; } // metodi tulostaa listan sisällön public function tulosta_lista() { echo "<$this->tyyppi>\n"; foreach($this->lista_alkiot as $alkio) { $alkio->tulosta(); echo "\n"; } echo "$this->tyyppi>\n"; } } // luokka lista-alkiolle, sisältää lista-alkion sisällön class lista_alkio { // attribuutit private $arvo; // konstruktori function __construct($arvo) { $this->arvo = $arvo; } // destruktori function __destruct() { $this->arvo = NULL; } // palauttaa lista-alkion sisällön public function anna_arvo() { return $this->arvo; } // asettaa lista-alkiolle sisällön public function aseta_arvo($arvo) { $this->arvo = $arvo; } // tulostaa lista-alkion public function tulosta() { echo "