• 0
  • 0

递归转迭代优化代码

2021-09-16 575 0 admin 所属分类:PHP 记录

在处理无限级分类的场景下,经常需要不断寻找子节点,如果直接使用递归的话,代码很容易阅读,结构会很简洁,但是 由于递归是不停调用函数,所以每次调用会产生新的函数调用栈,比较占用资源


现在引入迭代模式替换递归

思想就是 引入队列的方式不断把下级节点引入到队列中循环处理,直到队列为空


function getAllChildren($id) {
	// 初始化任务
	$tasks = [$id];
	// 存储所有后代元素
	$data = [];
	while ($tasks) {
		// 直到没有任务才推出循环
		foreach ($tasks as $v) {
			$data[] = $v;
			//存储元素
			// 追加任务
			$tasks = array_merge($tasks, getChildren($v['id']));
			// 将头部任务移除 继续下一个任务
			array_shift($tasks);
		}
	}
	return $data;
}
function getChildren($pid) {
	return fetch_all("SELECT * FROM xxx WHERE pid={$pid}");
}


返回顶部