Suunnittelin tälläisen "tiedostotietokannan", eli tämä tallentaa määrätyn 2-ulotteisen taulukon tekstitiedostoon. "1-ulotteisia" taulukkoja on turha käyttää. Paljon helpommalla pääsee kun tekee jotenkin muuten.
Kiitän Mikaelhia siitä, että keksin tehdä tälläisen. Näin nimittäin hänen esimerkkinsä JPHP :ssa ja päätin tehdä vähemmän yksinkertaisen.
Tällä voi siis tallentaa minkä tahansa 2D-taulukon. Tämä ei tosin ole optimaalisin ratkaisu tarkoitukseen, jos käytetään lähes aina samanlaista taulukko. Mutta ajaa varmasti asiansa.
Taulukko tallennetaan käskyllä
saveDB(taulukko, tiedoston nimi, erotin1, erotin2);
Listaus 2 :sta näet miten tiedosto tallentuun ja mikä on erotinten merkitys.
Tiedosto ladataan käskyllä
taulukko = loadDB(tiedoston nimi, erotin1, erotin2);
Koodia saa käyttää vapaasti.
<?php // void saveDB( array db, string fname string e1, string e2 ) // Tallentaa taulukon function saveDB($db, $fname, $e1, $e2) { $tiedosto = fopen($fname, "w"); // Avataan tiedosto flock($tiedosto, 2); // Lukitaan kirjoitusta varten foreach ($db as $rivikey => $rivi ) { // Käydään kaikki läpi fwrite($tiedosto, $rivikey . $e1); // Tallennetaan rivin nimi foreach ($rivi as $key => $sarake) { // Käydään sarakkeet läpi // Tallennetaan sarakkeen nimi ja arvo fwrite($tiedosto, $key . $e2 . $sarake . $e1); } fwrite($tiedosto, "\n"); // Rivinvaihto } flock($tiedosto, 3); // Poistetaan lukitus fclose($tiedosto); // Suljetaan tiedosto } // array loadDB( string fname, string e1, string e2 ) // Lataa taulukon function loadDB($fname, $e1, $e2) { $tiedosto = file($fname); // Ladataan tiedosto foreach($tiedosto as $rivi) { // Käydään rivit läpi $rivi = trim($rivi); // Trimmataan $sarakkeet = explode($e1, $rivi); // Katkotaan eroke 1 kohdalta $r = $sarakkeet[0]; // Rivin nimi on 1. sarakkeessa for($i = 1; $i < count($sarakkeet) - 1; $i++) { // Sitten kaikki sarakkeet läpi (paitsi se ensimmäinen) $sarake = explode($e2, $sarakkeet[$i]); // Pilkotaan $db[$r][$sarake[0]] = $sarake[1]; // ja tallennetaan } } return $db; // Lopuksi palautetaan ladattu taulukko } ?>
Esimerkkitiedosto
Tallennettava data:
<?php $a = array( 0 => array( 0 => 72, 2 => "possu", 72 => 31), 1 => array( "xii" => "roo"), 2 => array( "roo" => "xii") ); saveDB($a, "testi.txt", "|", "=>"); ?>
Tulos:
0|0=>72|2=>possu|72=>31| 1|xii=>roo| 2|roo=>xii|
serialize() on sellainen kiva funktio, jolla saa vaikka mitä tallennettavaan muotoon. ;)
https://www.php.net/manual/en/function.
Hmm.. käyhän sekin. Mutta tuostahan voi joku jotain oppia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.