私はArborJSを試し、ナレッジツリーを構築しようとしています。これが私のテストエリアです(左クリックしてノードに入り、右クリックして最初に戻ります)。私は「人文科学」セクションの「すべて」を肉付けしているので、その領域で遊ぶことをお勧めします。
このツリーは、ウィキペディアの学問分野のリストの記事から作成しています。
今、私は1つのmySQLテーブルから(PHP経由で)データをプルしています。テーブル構造はTreeNodeID、ParentID、Titleです。「TreeNodeID」は主キー(自動インクリメント)、「ParentID」はノードの親、「Title」はノードに表示されるテキストです。
私は今、この記事の27ページ中7ページにいます。この手動入力プロセスを自動化するコンピューターの機能を利用していないように感じます。
すべての主題のテキストファイルを作成しました。次の形式です。
Anthropology
Biological Anthropology
Forensic Anthropology
Gene-Culture Coevolution
Human Behavioral Ecology
Anthropological Linguistics
Synchronic Linguistics
Diachronic Linguistics
Ethnolinguistics
Socioloinguistics
Cultural Anthropology
Anthropology of Religion
Economic Anthropology
Archaelogy
...
PHPを使用してこれを調べ、データベースに(各ノードの正しいParentIDを)入力するにはどうすればよいですか?
更新#3:作業コード(以下の正解で示されています)
<?php
//echo "Checkpoint 1";
$data = "
Social sciences
Anthropology
Biological anthropology
Forensic anthropology
Gene-culture coevolution
Human behavioral ecology
Human evolution
Medical anthropology
Paleoanthropology
Population genetics
Primatology
Anthropological linguistics
Synchronic linguistics (or Descriptive linguistics)
Diachronic linguistics (or Historical linguistics)
Ethnolinguistics
Sociolinguistics
Cultural anthropology
Anthropology of religion
Economic anthropology
Ethnography
Ethnohistory
Ethnology
Ethnomusicology
Folklore
Mythology
Political anthropology
Psychological anthropology
Archaeology
...(goes on for a long time)
";
//echo "Checkpoint 2\n";
$lines = preg_split("/\n/", $data);
$parentids = array(0 => null);
$db = new PDO("host", 'username', 'pass');
$sql = 'INSERT INTO `TreeNode` SET ParentID = ?, Title = ?';
$stmt = $db->prepare($sql);
//echo "Checkpoint 3\n";
foreach ($lines as $line) {
if (!preg_match('/^([\s]*)(.*)$/', $line, $m)) {
continue;
}
$spaces = strlen($m[1]);
//$level = intval($spaces / 4); //assumes four spaces per indent
$level = strlen($m[1]); // if data is tab indented
$title = $m[2];
$parentid = ($level > 0 ? $parentids[$level - 1] : 1); //All "roots" are children of "Academia" which has an ID of "1";
$rv = $stmt->execute(array($parentid, $title));
$parentids[$level] = $db->lastInsertId();
echo "inserted $parentid - " . $parentid . " title: " . $title . "\n";
}
?>