我有一个社区站点,人们可以在这里发布页面,url从他们的名字生成。我的事就是我的事。我想创建一种方法,如果有另一个My Business,它会检查并使url为My - Business -2, My - Business -3等。
function check_url($url) {
$qry = mysqli_query($this->con, "SELECT * FROM businesses WHERE url LIKE '$url%'");
if(mysqli_num_rows($qry)>0) {
$slugs = array();
while($row = mysqli_fetch_array($qry)) $slugs[] = $row['url'];
if(in_array($url, $slugs)) {
$max = 1;
while(in_array(($url . '-' . ++$max ), $slugs)) $url .= '-' . $max;
}
}
return $url;
}
这是我的函数,但这仍然不起作用,就像有一个业务叫做my Bus,它将使它成为my- Bus -2,而它在my- Bus中是唯一的。我也用其他函数做过实验,但这个是最接近的。谁能告诉我一个完美的方法?
所以从我的理解,你试图避免插入/生成重复的URL。输出将像这样-
www.example.com/my-business
www.example.com/my-business-1
www.example.com/my-business-2
www.example.com/my-business-3
...
尝试使用这个函数-
function check_url($base_url, $new_url='', $num=0) {
if($new_url == '') {
$new_url = $base_url;
}
$qry = mysqli_query($this->con, "SELECT * FROM businesses WHERE url = '$new_url'");
if(mysqli_num_rows($qry) > 0) {
while($row = mysqli_fetch_array($qry)) {
$num++;
check_url($base_url, $base_url . '-' . $num, $num);
}
}
return $url;
}
基本上,这个函数将检查数据库,直到找到一个有效的URL。每次它都会增加数字并递归调用相同的函数来生成新的/有效的URL。简单和基本!
@SpritsDracula有工作代码,但是他的函数每次执行时都会查询数据库。也就是说,递归是一个很好的概念。下面是一段代码,它将节省您的多个数据库调用。
function check_url($url) {
$qry = mysqli_query($this->con, "SELECT * FROM businesses WHERE url LIKE '$url%'");
if(mysqli_num_rows($qry)>0) {
$baseUrl = $url;
$slugs = [];
while($row = mysqli_fetch_array($qry)) $slugs[] = $row['url'];
$max = 1;
while(in_array($url, $slugs)) {
$url = $baseUrl . "-" . $max++;
}
}
return $url;
}