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.