Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Arvostele pelit
15.8. klo 12 mennessä!

Keskustelu: Koodit näytille: PHP: Tiedostotietokanta

Sivu 1 / 1

arcatan [11.04.2003 15:55:14]

#

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|

mikaelh [11.04.2003 22:14:56]

#

serialize() on sellainen kiva funktio, jolla saa vaikka mitä tallennettavaan muotoon. ;)
https://www.php.net/manual/en/function.serialize.php

arcatan [12.04.2003 16:34:08]

#

Hmm.. käyhän sekin. Mutta tuostahan voi joku jotain oppia.

Vastaus

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

Tietoa sivustosta