Ben büyük bir benzer çok boyutlu diziye düz dosya veritabanı bilgilerini ayrıştırma için bir sınıf yapmak istiyorum. Ben aşağıdaki gibi python-vari biçimi bir tür veritabanı biçimlendirme fikri vardı:
"tree #1":
"key" "value"
"sub-tree #1":
"key" "value"
"key #2" "value"
"key #3" "value"
Ben bu ayrıştırmak ve anahtarları / değerlerini içine atmak ayrıştırma sırasında inşa ve dizi yapmaya çalışıyorum, ve ben bunu çok dinamik ve genişletilebilir olmak istiyorum. Ben çok farklı teknikler denedim ve ben bu girişimleri her şaşkına oldum. Bu benim en yeni:
function parse($file=null) {
$file = $file ? $file : $this->dbfile;
### character variables
# get values of
$src = file_get_contents($file);
# current character number
$p = 0;
### array variables
# temp shit
$a = array();
# set $ln keys
$ln = array("q"=>0,"k"=>null,"v"=>null,"s"=>null,"p"=>null);
# indent level
$ilvl = 0;
### go time
while (strlen($src) > $p) {
$chr = $src[$p];
# quote
if ($chr == "\"") {
if ($ln["q"] == 1) { // quote open?
$ln["q"] = 0; // close it
if (!$ln["k"]) { // key yet?
$ln["k"] = $ln["s"]; // set key
$ln["s"] = null;
$a[$ln["k"]] = $ln["v"]; // write to current array
} else { // value time
$ln["v"] = $ln["s"]; // set value
$ln["s"] = null;
}
} else {
$ln["q"] = 1; // open quote
}
}
elseif ($chr == "\n" && $ln["q"] == 0) {
$ln = array("q"=>0,"k"=>null,"v"=>null,"s"=>null,"p"=>null);
$llvl = $ilvl;
}
# beginning of subset
elseif ($chr == ":" && $ln["q"] == 0) {
$ilvl++;
if (!array_key_exists($ilvl,$a)) { $a[$ilvl] = array(); }
$a[$ilvl][$ln["k"]] = array("@mbdb-parent"=> $ilvl-1 .":".$ln["k"]);
$ln = array("q"=>0,"k"=>null,"v"=>null,"s"=>null,"p"=>null);
$this->debug("INDENT++",$ilvl);
}
# end of subset
elseif ($chr == "}") {
$ilvl--;
$this->debug("INDENT--",$ilvl);
}
# other characters
else {
if ($ln["q"] == 1) {
$ln["s"] .= $chr;
} else {
# error
}
}
$p++;
}
var_dump($a);
}
Ben dürüst nereye buradan gitmek için hiçbir fikrim yok. Beni en çok rahatsız eden şey burada var $this->c["main"]["sub"]["etc"]
yolu gibi çok boyutlu değerlerini ayarlıyor. Hatta yapılabilir mi? Nasıl Aslında yuva veri olarak diziler db dosyasında yuvalanmış olabilir?