par
VaN » 19 févr. 2010, 14:36
Bonjour,
j'ai une table de rubriques, que voici :
CREATE TABLE IF NOT EXISTS `cnje_documents_rubriques` (
`rubrique_id` int(11) NOT NULL AUTO_INCREMENT,
`rubrique_parent_id` int(11) DEFAULT NULL,
`rubrique_nom` varchar(100) NOT NULL,
`rubrique_statut` int(11) NOT NULL,
PRIMARY KEY (`rubrique_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
--
-- Contenu de la table `cnje_documents_rubriques`
--
INSERT INTO `cnje_documents_rubriques` (`rubrique_id`, `rubrique_parent_id`, `rubrique_nom`, `rubrique_statut`) VALUES
(1, NULL, 'Documents administratifs', 1),
(2, NULL, 'Modèles', 1),
(3, 1, 'Cahiers de charges', 1),
(4, 1, 'Rapports d''activité', 1),
(5, 1, 'Visites Qualité', 1),
(6, 2, 'CV', 1),
(7, 2, 'Lettres de motivation', 1),
(8, 3, 'Test', 1);
J'aimerai, à partir d'un tableau stockant les rubriques parent de niveau 0 (donc celles avec un rubrique_parent_id valant 0), remplir mon tableau de rubriques avec leurs enfants, pour arriver au tableau suivant :
Array
(
[0] => Array
(
[rubrique_id] => 1
[rubrique_nom] => Documents administratifs
[children] => Array
(
[0] => Array
(
[rubrique_id] => 3
[rubrique_nom] => Cahiers de charges
[children] => Array
(
[rubrique_id] => 8
[rubrique_nom] => Test
)
)
[1] => Array
(
[rubrique_id] => 4
[rubrique_nom] => Rapports dactivité
)
[2] => Array
(
[rubrique_id] => 5
[rubrique_nom] => Visites Qualité
)
)
)
[1] => Array
(
[rubrique_id] => 2
[rubrique_nom] => Modèles
[children] => Array
(
[0] => Array
(
[rubrique_id] => 6
[rubrique_nom] => CV
)
[1] => Array
(
[rubrique_id] => 7
[rubrique_nom] => Lettres de motivation
)
)
)
)
Voici la fonction qui va chercher les parents de niveau 0 :
function get_documents_rubriques() {
global $config, $tables;
$documents_rubriques = get_array_from_query("SELECT rubrique_id, rubrique_nom
FROM ".$tables["documents_rubriques"]."
WHERE rubrique_parent_id IS NULL AND rubrique_statut = 1");
$documents_rubriques = fill_array_with_children($documents_rubriques, $tables["documents_rubriques"], array("id" => "rubrique_id", "parent" => "rubrique_parent_id", "statut" => "rubrique_statut"), array("rubrique_id", "rubrique_nom"));
return $documents_rubriques;
}
Et la fonction recursive censée remplir un tableau avec ses enfants :
// Remplie un tableau avec ses enfants, et retourne ce tableau
function fill_array_with_children($array, $table, $conditions_fields, $selected_fields, $level = 0) {
global $config, $tables;
$level++;
$selected_fields_sql = concat_field($selected_fields);
foreach($array as $key => $row) {
$children = get_array_from_query(sprintf("SELECT ".$selected_fields_sql." FROM ".$table."
WHERE ".$conditions_fields["parent"]." = '%d' AND ".$conditions_fields["statut"]." = 1", $row[$conditions_fields["id"]]), true);
print_r_pre($children);
if(!empty($children)) {
foreach($children as $key_child => $child) {
$children[$key_child]["children"] = fill_array_with_children($child, $table, $conditions_fields, $selected_fields, $level);
}
$array[$key]["children"] = $children;
}
}
echo "<hr />";
return $array;
}
Mais actuellement, cela ne fonctionne pas. Voici ce que j'obtiens :
Array
(
[0] => Array
(
[rubrique_id] => 1
[rubrique_nom] => Documents administratifs
[children] => Array
(
[0] => Array
(
[rubrique_id] => 3
[rubrique_nom] => Cahiers de charges
[children] => Array
(
[rubrique_id] => A
[rubrique_nom] => Cahiers de charges
)
)
[1] => Array
(
[rubrique_id] => 4
[rubrique_nom] => Rapports d activité
[children] => Array
(
[rubrique_id] => 4
[rubrique_nom] => Rapports d activité
)
)
[2] => Array
(
[rubrique_id] => 5
[rubrique_nom] => Visites Qualité
[children] => Array
(
[rubrique_id] => 5
[rubrique_nom] => Visites Qualité
)
)
)
)
[1] => Array
(
[rubrique_id] => 2
[rubrique_nom] => Modèles
[children] => Array
(
[0] => Array
(
[rubrique_id] => 6
[rubrique_nom] => CV
[children] => Array
(
[rubrique_id] => 6
[rubrique_nom] => CV
)
)
[1] => Array
(
[rubrique_id] => 7
[rubrique_nom] => Lettres de motivation
[children] => Array
(
[rubrique_id] => 7
[rubrique_nom] => Lettres de motivation
)
)
)
)
)
Une âme charitable pourrai-elle m'aider à debugger cette fonction ?
Bonjour,
j'ai une table de rubriques, que voici :
[sql]CREATE TABLE IF NOT EXISTS `cnje_documents_rubriques` (
`rubrique_id` int(11) NOT NULL AUTO_INCREMENT,
`rubrique_parent_id` int(11) DEFAULT NULL,
`rubrique_nom` varchar(100) NOT NULL,
`rubrique_statut` int(11) NOT NULL,
PRIMARY KEY (`rubrique_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
--
-- Contenu de la table `cnje_documents_rubriques`
--
INSERT INTO `cnje_documents_rubriques` (`rubrique_id`, `rubrique_parent_id`, `rubrique_nom`, `rubrique_statut`) VALUES
(1, NULL, 'Documents administratifs', 1),
(2, NULL, 'Modèles', 1),
(3, 1, 'Cahiers de charges', 1),
(4, 1, 'Rapports d''activité', 1),
(5, 1, 'Visites Qualité', 1),
(6, 2, 'CV', 1),
(7, 2, 'Lettres de motivation', 1),
(8, 3, 'Test', 1);[/sql]
J'aimerai, à partir d'un tableau stockant les rubriques parent de niveau 0 (donc celles avec un rubrique_parent_id valant 0), remplir mon tableau de rubriques avec leurs enfants, pour arriver au tableau suivant :
[php]Array
(
[0] => Array
(
[rubrique_id] => 1
[rubrique_nom] => Documents administratifs
[children] => Array
(
[0] => Array
(
[rubrique_id] => 3
[rubrique_nom] => Cahiers de charges
[children] => Array
(
[rubrique_id] => 8
[rubrique_nom] => Test
)
)
[1] => Array
(
[rubrique_id] => 4
[rubrique_nom] => Rapports dactivité
)
[2] => Array
(
[rubrique_id] => 5
[rubrique_nom] => Visites Qualité
)
)
)
[1] => Array
(
[rubrique_id] => 2
[rubrique_nom] => Modèles
[children] => Array
(
[0] => Array
(
[rubrique_id] => 6
[rubrique_nom] => CV
)
[1] => Array
(
[rubrique_id] => 7
[rubrique_nom] => Lettres de motivation
)
)
)
)
[/php]
Voici la fonction qui va chercher les parents de niveau 0 :
[php]function get_documents_rubriques() {
global $config, $tables;
$documents_rubriques = get_array_from_query("SELECT rubrique_id, rubrique_nom
FROM ".$tables["documents_rubriques"]."
WHERE rubrique_parent_id IS NULL AND rubrique_statut = 1");
$documents_rubriques = fill_array_with_children($documents_rubriques, $tables["documents_rubriques"], array("id" => "rubrique_id", "parent" => "rubrique_parent_id", "statut" => "rubrique_statut"), array("rubrique_id", "rubrique_nom"));
return $documents_rubriques;
}[/php]
Et la fonction recursive censée remplir un tableau avec ses enfants :
[php]// Remplie un tableau avec ses enfants, et retourne ce tableau
function fill_array_with_children($array, $table, $conditions_fields, $selected_fields, $level = 0) {
global $config, $tables;
$level++;
$selected_fields_sql = concat_field($selected_fields);
foreach($array as $key => $row) {
$children = get_array_from_query(sprintf("SELECT ".$selected_fields_sql." FROM ".$table."
WHERE ".$conditions_fields["parent"]." = '%d' AND ".$conditions_fields["statut"]." = 1", $row[$conditions_fields["id"]]), true);
print_r_pre($children);
if(!empty($children)) {
foreach($children as $key_child => $child) {
$children[$key_child]["children"] = fill_array_with_children($child, $table, $conditions_fields, $selected_fields, $level);
}
$array[$key]["children"] = $children;
}
}
echo "<hr />";
return $array;
}[/php]
Mais actuellement, cela ne fonctionne pas. Voici ce que j'obtiens : [php]Array
(
[0] => Array
(
[rubrique_id] => 1
[rubrique_nom] => Documents administratifs
[children] => Array
(
[0] => Array
(
[rubrique_id] => 3
[rubrique_nom] => Cahiers de charges
[children] => Array
(
[rubrique_id] => A
[rubrique_nom] => Cahiers de charges
)
)
[1] => Array
(
[rubrique_id] => 4
[rubrique_nom] => Rapports d activité
[children] => Array
(
[rubrique_id] => 4
[rubrique_nom] => Rapports d activité
)
)
[2] => Array
(
[rubrique_id] => 5
[rubrique_nom] => Visites Qualité
[children] => Array
(
[rubrique_id] => 5
[rubrique_nom] => Visites Qualité
)
)
)
)
[1] => Array
(
[rubrique_id] => 2
[rubrique_nom] => Modèles
[children] => Array
(
[0] => Array
(
[rubrique_id] => 6
[rubrique_nom] => CV
[children] => Array
(
[rubrique_id] => 6
[rubrique_nom] => CV
)
)
[1] => Array
(
[rubrique_id] => 7
[rubrique_nom] => Lettres de motivation
[children] => Array
(
[rubrique_id] => 7
[rubrique_nom] => Lettres de motivation
)
)
)
)
)
[/php]
Une âme charitable pourrai-elle m'aider à debugger cette fonction ?