Maison >développement back-end >tutoriel php >Explication détaillée de la valeur de retour de la fonction récursive de classification infinie dans ecshop
Lors de la classification des produits indexation dans le développement secondaire d'ecshop, l'identifiant de catégorie de niveau supérieur doit être obtenu en fonction de l'identifiant de catégorie. La première réaction a été d'utiliser la récursion pour le transmettre, j'ai donc écrit une fonction récursive comme suit :
function getCatTopId($cat_id) { if ($cat_id) { $res = Array(); $sql = 'SELECT cat_id, parent_id' . ' FROM ' . $GLOBALS['ecs']->table('category') . ' WHERE cat_id = ' . $cat_id . ' AND is_show = 1'; $res = $GLOBALS['db']->getAll($sql); if ($res[0]['parent_id'] > 0) { getCatTopId($res[0]['parent_id']); } else { return $res[0]['cat_id']; } } else { return 1; } }
Un programme de test, pas de valeur de retour ? Après une longue vérification, aucune erreur n’a été trouvée. Il semblait que le circuit dans le cerveau était rompu. Quand j'ai demandé à Shui Shen (un internaute au bon cœur) aujourd'hui, il m'a aidé à y répondre, et la modification est la suivante :
function getCatTopId($cat_id) { if ($cat_id) { $res = Array(); $sql = 'SELECT cat_id, parent_id' . ' FROM ' . $GLOBALS['ecs']->table('category') . ' WHERE cat_id = ' . $cat_id . ' AND is_show = 1'; $res = $GLOBALS['db']->getAll($sql); if ($res[0]['parent_id'] > 0) { return getCatTopId($res[0]['parent_id']); // 修改处,多写个 return ,让函数返回值 } else { return $res[0]['cat_id']; } } else { return 1; } }
La fonction est écrite en interne, et même si elle revient, elle le fera revenir seulement à la position de la fonction interne, donc Il y a une autre couche de fonction principale à l'extérieur, qui doit être renvoyée à nouveau
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!