ソートされたマルチレベルの親 - >子配列を作成する際に非常に役立つstackoverflow threadを使用しました。今はそのソートされた配列を取りたい複数レベルの親 - >子配列を使用して1つのSELECTを作成する
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
)
)
)
)
)
)
:
以下上述したスレッドのソート方法に基づいて、サンプルマルチレベル(3つのレベル)parent->子ソートされた配列であります上で見たように
<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>
目標マルチレベルの親/子を表す表示文字列をコンパイルすることである。そして、例えば以下のようparent->子構造を表示して表す単一 HTML SELECTを生成しますパス各項目ごとに各オプションのVALUEは、表示されたコンパイル済み文字列の最後の項目です。そのため、OPTION 'User Manual - > Users - > Privileges'では、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>
あなたは唯一の親/子関係の1つのレベルを追跡することが可能であることがわかります。私は複数のレベルがある場合、以前のX parent.nameを追跡中にトラブルを抱えている
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;
}
を次のように選択するオプションリストを作成するために、配列を処理
私の関数です。ここの援助は歓迎されるでしょう。ありがとうございました!
あなたの配列はどのようなものが見えますか?再帰のような匂いがかかっているかもしれません。 –
あなたの権利は、再帰を使って2つのレベルを表示するので、問題は2つのレベルを超えてツリー構造の履歴を保持しています。問題は再帰があらかじめソートされた配列を通して機能することです。それは各子供を扱い、それが自然に進行するにつれて子供です。だから、それが前の子供に戻るとき、私は弦を戻すことを概念化することに苦労している。うまくいけばそれは理にかなっている。私はポストを配列の例で更新します。 – Brad
@ブラッド:スニペットに再帰呼び出しはありません。 'toUL'って何? '$ target'とは何ですか?階層を表現するための完全なパスを繰り返す代わりに、視覚的な手掛かり(インデント)を使用することを検討しますか? –