我想用PHP和MySQL構建一個Evernote樣式的筆記應用程序。如何從MySQL數據庫記錄中生成一個用於多級文件夾結構的PHP數組
印象筆記允許頂層文件夾中有筆記記錄。
我想讓我的應用程序允許文件夾位於文件夾內,因此頂層文件夾可以有一個子文件夾,然後在子文件夾內有註釋記錄。
像下面這個圖片...
我有這個PHP函數將建立上圖中所示的結構菜單...
此代碼建立顯示菜單
<?php
function tree($array, $parent, $parts = array(), $step = 0) {
if (!count($array)) {
return '';
}
$tid = ($step == 0) ? 'id="tree"' : '';
$t = '<ul class="unstyled" '.$tid.'>';
foreach ($array as $key => $item) {
if (is_array($item)) {
$open = $step !== false && (isset($parts[$step]) && $key == $parts[$step]);
$t .= '<li class="directory'. ($open ? ' open' : '') .'">';
$t .= '<a href="#" data-role="directory"><i class="glyphicon glyphicon-folder-'. ($open ? 'open' : 'close') .'"></i> ' . $key . '</a>';
$t .= tree($item, "$parent/$key", $parts, $open ? $step + 1 : false);
$t .= '</li>';
} else {
$selected = (isset($parts[$step]) && $item == $parts[$step]);
$t .= '<li class="file'. ($selected ? ' active' : '') .'"><a href="'. $parent .'/'. $item . '">'.$item.'</a></li>';
}
}
$t .= '</ul>';
return $t;
}
?>
上面的代碼通過調用上述_getTree()
protected function _getTree($dir = LIBRARY)
{
$return = array('directories' => array(), 'files' => array());
$items = scandir($dir);
foreach ($items as $item) {
if(preg_match($this->_ignore, $item)) {
if($this->_force_unignore === false || !preg_match($this->_force_unignore, $item)) {
continue;
}
}
$path = $dir . DIRECTORY_SEPARATOR . $item;
if (is_dir($path)) {
$return['directories'][$item] = $this->_getTree($path);
continue;
}
$return['files'][$item] = $item;
}
uksort($return['directories'], "strnatcasecmp");
uksort($return['files'], "strnatcasecmp");
return $return['directories'] + $return['files'];
}
_getTree()
構建的格式通過掃描服務器目錄尋找文件夾和文件如下所示的陣列構建樹形菜單。然後它將該數組傳遞到tree()
。我的目標是讓一個函數構建這個相同的樣式數組,但從MySQL數據庫文件夾和記錄記錄中。
任何人都可以幫助我一個函數,可以從2個數據庫表中構建像下面的數組。
我的數據庫表將
- 筆記本與列名
parent
表示父文件夾。如果筆記本是父筆記本的子文件夾,則筆記本ID將進入父字段。 0 ==父級文件夾。 - 筆記與
parent
列被鏈接到筆記本的ID。
任何幫助非常感謝?
Array(
[top_level_notebook_1] => Array(
[child_note_of_parent_notebook_1.html] => some_note.html
[child_level_notebook_1] => Array(
[note_1.html] => some_note.html
)
[child_level_notebook_2] => Array(
[note_2] => cache.js
[note_3] => cache.js.md
[note_4] => Confirmation-Dialog.js
)
[child_level_notebook_3] => Array(
[crud.php] => crud.php
[error2mysql.php] => error2mysql.php
[upload_file_from_remote_url.php] => upload_file_from_remote_url.php
)
)
[top_level_notebook_2] => Array(
[note_7.html] => some_note.html
)
[root_level_note.html] => Dev_Bookmarks.html
)
嗯..這是要求對如何構建您的數據庫或一旦你已經完成了如何查詢它的意見? –
@BobNocraz關於如何查詢它。我更新了問題以顯示父列的數據庫結構 – JasonDavis