小白们在学习递归函数的时候可能无法搞清楚递归函数的原理和运行机制,递归函数是常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,否则就会无限调用下去。下面先介绍php实现递归函数的3种基本方式。
function test($a=0,&$result=array()){
$a++;
if ($a<10) {
$result[]=$a;
test($a,$result);
}
echo $a;
return $result;
}
上面的例子非常简答,以a<10作为判断条件,条件成立,则把a赋给result[];将result的引用传入函数,会将每一次递归产生的a添加到结果数组result。因而本例生成的$result数组是 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 ) 。function test($a=0,$result=array()){
global $result;
$a++;
if ($a<10) {
$result[]=$a;
test($a,$result);
}
return $result;
}
function test(){
static $count=0;
echo $count;
$count++;
}
test();
test();
test();
test();
test();
这一段代码的执行结果是多少?是00000么?必然不是。是01234。首先第一次调用test(),static对 $count 进行初始化,其后每一次执行完都会保留 $count 的值,不再进行初始化,相当于直接忽略了 static $count=0; 这一句。function test($a=0){
static $result=array();
$a++;
if ($a<10) {
$result[]=$a;
test($a);
}
return $result;
}
function test($a=0){
$a++;
if ($a<10) {
echo $a;
test($a);
}
}
function arrContentReplact($array)
{
if(is_array($array))
{
foreach($array as $k => $v)
{
$array[$k] = arrContentReplact($array[$k]);
}
}else
{
$array = str_replace(
array("<", ">"),
array("{", "}"),
$array
);
}
return $array;
}
$arr = array(array("< 小刚>","< 小晓>",array("<小强>",array("<浪人>"))),"< 小飞>","< 小李>","< 小红>");
$arr3 = arrContentReplact($arr);
echo "
";
print_r($arr3);
echo "
";
?>
CREATE TABLE IF NOT EXISTS `class` (
`id` mediumint(6) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`pid` mediumint(6) NOT NULL DEFAULT "0",
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
function get_str($id = 0) {
global $str;
$sql = "select id,title from class where pid= $id";
$result = mysql_query($sql);//查询pid的子类的分类
if($result && mysql_affected_rows()){//如果有子类
$str .= "<ul>";
while ($row = mysql_fetch_array($result)) { //循环记录集
$str .= "<li>" . $row["id"] . "--" . $row["title"] . "</li>"; //构建字符串
get_str($row["id"]); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级
}
$str .= "</ul>";
}
return $str;
}
以上函数get_str()通过递归,不断查询下级分类,并最终返回字符串,大家可以根据项目需求修改其中的str,最终生成一个无限分级列表:include_once("connect.php"); //连接数据库,connect.php文件自己写一个啊
echo get_str(0); //输出无限级分类
function get_array($id=0){
$sql = "select id,title from class where pid= $id";
$result = mysql_query($sql);//查询子类
$arr = array();
if($result && mysql_affected_rows()){//如果有子类
while($rows=mysql_fetch_assoc($result)){ //循环记录集
$rows["list"] = get_array($rows["id"]); //调用函数,传入参数,继续查询下级
$arr[] = $rows; //组合数组
}
return $arr;
}
}
函数get_array()返回了数组,这是我们期待的,所以推荐使用get_array()得到数组,这样一来,我们可以对数组进行任意操作,比如我们可以将数组转换成json格式的数据传给前端页面,前端页面可以通过解析json数据灵活展示分类信息。比如树形结构的分类列表,下拉分类列表等。include_once("connect.php"); //连接数据库
$list = get_array(0); //调用函数
print_r($list); //输出数组
echo json_encode($list);
PHP 图像处理imagecolorexactalpha — 取得指定的颜色加透明度的索引值。语法int imagecolorexactalpha ( resource $image , int...
PHP SimpleXML 简介 SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式,只要您知道 XML 文档的布局。 SimpleXML 转...
PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。 基本的 PHP 语法 PHP 脚本可以放在文档中的任何位置。PHP 脚本以 ?p...
PHP Date() 函数PHP date() 函数用于格式化时间/日期。date() 函数返回将整数timestamp按照给定的格式字串而产生的字符串。PHP D...
HTML表格边框 table 元素定义 border 属性。大多数浏览器在表和每个单元格周围绘制边框。例子以下代码显示了 border 元素的应用...
HTML表单输入如果将type属性设置为input元素的文本,浏览器将显示单行文本框。以下列表总结了可用于文本输入元素类型的属性。dir...
.dropbtn {background-color: #4CAF50;color: white;padding: 16px;font-size: 16px;border: none;cursor: pointer;}.dropdown {...