我使用下面的stackoverflow thread,這在創建排序的多級父 - >子數組時非常有幫助。使用多級父 - >子數組創建單個SELECT
的下面是一個示例的多級(3級)父 - >基於該上述線程的排序方法排序的子陣列:我想採取排序後的數組
Array
(
[1] => Array
(
[name] => User Manual
[parentId] => 0
[children] => Array
(
[2] => Array
(
[name] => Users
[parentId] => 1
[children] => Array
(
[4] => Array
(
[name] => Privileges
[parentId] => 2
)
)
)
[3] => Array
(
[name] => Reference
[parentId] => 1
[children] => Array
(
[5] => Array
(
[name] => Glossary
[parentId] => 3
)
[6] => Array
(
[name] => Index
[parentId] => 3
)
)
)
)
)
)
現在並生成單個 HTML選擇顯示和表示父 - >子結構,如下面的例子:
<option value='1'>User Manual</option>
<option value='2'>User Manual -> Users</option>
<option value='4'>User Manual -> Users -> Privileges</option>
<option value='3'>User Manual -> Reference</option>
<option value='5'>User Manual -> Reference -> Glossary</option>
<option value='6'>User Manual -> Reference -> Index</option>
如上面看到的目標是編譯表示多層次的父/子顯示字符串路徑爲每個項目。每個選項的值是表示的編譯字符串中的最後一項。因此,對於OPTION'用戶手冊 - >用戶 - >權限',VALUE是特權的ID,但顯示文本表示它在數組中的父/子關係。
的選擇,我創建最終總是顯示像下面的選項列表:
<option value='1'>User Manual</option>
<option value='2'>User Manual -> Users</option>
<option value='4'>Users -> Privileges</option>
<option value='3'>User Manual -> Reference</option>
<option value='5'>Reference -> Glossary</option>
<option value='6'>Reference -> Index</option>
你可以看到,它只是能夠保持父/子關係的一個水平的軌道。
我的函數處理數組創建選擇選項列表如下:
function buildOptions($arr, $target, $parent = NULL) {
$html = "";
foreach ($arr as $key => $v)
{
if (array_key_exists('children', $v))
{
if ($key == $target)
$html .= "<option value='$key' selected>$parent {$v['name']}</option>\n";
else
$html .= "<option value='$key'>$parent {$v['name']}</option>\n";
$html .= buildOptions($v['children'],$target,$v['name']." > ");
}
else if ($key == $target)
$html .= "<option value='$key' selected>$parent {$v['name']}</option>\n";
else
$html .= "<option value='$key'>$parent {$v['name']}</option>\n";
}
return $html;
}
我有在跟蹤以前的X parent.name的時候有一個以上的水平麻煩
。任何幫助在這裏都會受到歡迎。謝謝!
什麼是您的陣列是什麼樣子?聞起來像遞歸可能會涉及到。 –
你的權利,我使用遞歸來顯示2級,所以我的問題是保留樹結構歷史兩級。問題是遞歸通過預先排序的數組。它自然而然地處理每個孩子以及孩子進步的過程。所以當它回到以前的孩子時,我很難將字符串逐步回退。希望這是有道理的。我將用數組示例更新我的帖子。 – Brad
@Brad:您的代碼段中沒有遞歸調用。什麼是「toUL」?什麼是'$ target'?你會考慮使用視覺線索(縮進),而不是重複表達層次結構的完整路徑嗎? –