gpt4 book ai didi

PHP MySQL - 递归函数的尝试

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:39 25 4
gpt4 key购买 nike

我正在尝试我的第一个递归函数(至少我认为我是!)但只成功了一半。一、代码:

function check_title($i,$title) {
$q=mysql_query("SELECT Title FROM posts WHERE Title = '$title'");
$num=mysql_num_rows($q);
if($num==0) {
return $title;
}else {
$title=$title.' ('.$i++.')';
check_title($i,$title);
}
}

我正在做的是获取一个字符串(标题)并检查数据库中是否已经存在该标题。如果是这样,我想在较新的重复项上附加一个数字(例如,“我是标题”变成“我是标题 2”)。然后,我需要再次运行该函数以检查我的标题的这个新版本,并根据需要增加附加值(“I Am A Title-3”)。一旦没有发现重复,就以可接受的形式返回标题。

它在没有发现重复时工作(简单的一点),但在发现重复时失败。不是附加数字,而是清空整个标题变量。

如有任何帮助,我们将不胜感激!

最佳答案

正如 Mchl 所说,空标题是由于 else 分支中缺少返回。

但是,该函数存在问题,因为它没有按照您的预期执行。目前,您的函数正在将 $title 构建为“Title-1-2-3-4-etc”,这与您当前将数字附加到标题并再次检查的方式相同。与其在递归调用中传递修改后的标题,不如传递基本标题。然后,对于查询,修改标题。

function check_title($title, $i = 0) {
$qtitle = $title . ($i == 0 ? '' : "-$i");
$q=mysql_query("SELECT Title FROM posts WHERE Title = '$qtitle'");
$num=mysql_num_rows($q);
if($num==0) {
return $title . ($i == 0 ? '' : "-$i");
}else {
return check_title(++$i,$title);
}
}

PS,我还更改了参数的顺序,这样您的初始调用就不需要指定 0。

$title = check_title($title);

PPS,我应该提到这是通过递归实现的解决方案。但是,递归解决方案在这里不是合适的解决方案,因为它不必要地返回数据库。相反,您应该使用一个 sql 查询来选择所有标题 LIKE "$title%"Order by title asc。然后,遍历每个结果并与标题进行正则表达式比较,看它是否匹配模式 <title>|<title>-<#>。如果它确实增加了一个重复的计数器。最后,您吐出带有附加计数器值的标题。我会将该解决方案作为原始海报的练习。

关于PHP MySQL - 递归函数的尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com