2016-11-14 74 views
1

即時得到的數據和在PHP陣列經由轉換成的javascript:移動通過對象通過PHP從數據庫填充有對象

var dbarrayjs = <?php echo json_encode($dbarrayphp);?>;

這樣JS輸出一個對象,其中我的數據庫的每個記錄是對象本身。記錄(我的數據庫的一行)由2個字符串組成。 其中一個字符串是數字列表,用「,」分隔,需要通過string.split將其更改爲數組。另一個字符串是一個簡單的數字。 這個的含義是描述一個樹狀系統的前身。單個數字字符串是一個節點,多位字符串包含其所有直接父節點。一個特殊的標準是,所有父母都需要通過才能確認孩子。

我的需求是遍歷此係統的一種方法,並檢查是否可以覆蓋此樹中的每個元素,或者是否存在因前輩選擇不當而無法訪問的元素。一個簡單的例子是: Example predecessor tree

編輯:2017年3月21日 - 我正在尋找一個topsort算法,並不知道它當時。

+0

你必須提供一些樣本測試數據和一些你已經嘗試過的代碼。一個提示,寫一個遞歸函數來遍歷整個列表,但要記住忽略該對象,如果它已經是過程,否則你會得到一個無限循環。 – Will

回答

1

這是圖論中的一個基本算法。你有一個有向圖:連接只進入一個方向。如果你有一個給定的根節點,那麼搜索就相當容易了:遍歷根目錄樹(深度優先或breadth-first)。然後看看你是否擊中了所有的節點。

您的問題描述有點含糊:你只需要檢測是否有缺失的節點?你需要識別它嗎?實際上,是否只有一個缺失節點成爲可能?根據這些細節,您實施的會計可能需要做更多的工作。例如,如果您只需檢測是否存在任何缺失節點,則只需在您搜索時訪問它們時對節點進行計數即可。如果最終計數小於數據庫中節點的數量,那麼您有一些缺失。

如果您必須識別缺失的節點,那麼您必須跟蹤您訪問過哪些節點。然後,您需要另一塊代碼來提取圖的所有節點,報告那些不在「已訪問」列表中的節點。