今日は頭を壁にぶつけました。再帰的な親子関係を持つメニュー項目のリストを持つ mysql テーブルがあります。それに一致する連想配列を作成する必要があります。
ここに私のコードがあり、その下に私の問題の説明があります。
MySQL データベース
CREATE TABLE IF NOT EXISTS `menus` (
`sectionid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parentid` int(10) unsigned NOT NULL DEFAULT '0',
`name` varchar(128) NOT NULL DEFAULT '',
PRIMARY KEY (`sectionid`)
);
INSERT INTO `menus` (`sectionid`, `parentid`, `name`) VALUES
(1, 0,'DOWNLOADS'),(4, 1,'Player Scenarios'),
(5, 1,'Co Op Scenarios'),(9, 1,'MAPS');
PHP コード
function get_db_children($parentid) {
$mysqli = mysqli_open();
$sqlStr = "select sectionid as childid from menus where parentid=$parentid order by sectionid";
$result = $mysqli->query($sqlStr);
$mysqli->close();
return $result;
}
function get_children(&$node) {
foreach ($node as $key=>$value) {
$result = get_db_children($key);
while ($row = $result->fetch_assoc()) {
$tmp = array($row['childid'] => array());
$node[$key][$row['childid']]= get_children($tmp);
}
}
return $node;
}
===========================================
上記の関数は、次のようにメイン スクリプトから呼び出されます。
$categories[0] = array ();
get_children($categories);
print "Categories=".print_r($categories);
exit;
==============
私の問題。
私の問題は、返された配列の構造が、私が望む方法とはまったく異なることです。
上記のコードは次を返します。
Categories=
Array ( [0] => Array
( [1] => Array
( [1] => Array
( [4] => Array
( [4] => Array ( ) )
[5] => Array
( [5] => Array ( ) )
[9] => Array
( [9] => Array ( ) )
)
)
)
)
私が欲しいのは:
Categories=
Array ( [0] => Array
( [1] => Array
(
( [4] => Array ( ) )
( [5] => Array ( ) )
( [9] => Array ( ) )
)
)
)
null 配列は、子がないことを示します。
キー値の二重化を取り除く方法がわかりません。:(
誰かが助けてくれれば、大歓迎です。
乾杯、昼寝