我需要使用以下代码根据用户输入生成唯一的子弹:
public function create_slug($id, $name){
$count = null;
$name = url_title($name);
while(true) {
$this->db->select('id');
$this->db->where('id !=', $id);
$this->db->where('slug', $name);
$query = $this->db->get('users');
if ($query->num_rows() == 0) {
break;
} else {
$name .= '-' . (++$count);
}
}
return $name;
}
它会选择处理该子弹($name
)的所有内容,但要选择它自己的子弹。第一次用户输入的结果为123
slug 123
。对于第二个相同的输入,子句是123-1
,但是带有相同文本的第三个输入是带有result的123-1-2
,这不是我想要的。
我尝试了另一种方式:
public function create_slug($id, $name){
$count = null;
$name = url_title($name);
$this->db->select('id');
$this->db->where('id !=', $id);
$this->db->where('slug', $name);
$query = $this->db->get('users');
if($query->num_rows()){
$count = '-' . ($query->num_rows() + 1);
}
return $name . $count;
}
在这里,是相同的查询,但count行+ 1。对于第一123
蛞蝓是123
; 第二123
,sl 123-2
; 第三123
,再塞子123-2
,这不是唯一的。
如何创建基于某些用户输入且唯一的子弹,如果有值的弹子name
,则next将是name-1
,如果再次是,next将是name-2
等。
您需要根据原始名称创建一个临时的slug_name,并测试该slug_name。失败时,根据原始名称重新创建新的slug_name。成功时(退出循环),返回修改后的slug_name。
public function create_slug($id, $name)
{
$count = 0;
$name = url_title($name);
$slug_name = $name; // Create temp name
while(true)
{
$this->db->select('id');
$this->db->where('id !=', $id);
$this->db->where('slug', $slug_name); // Test temp name
$query = $this->db->get('users');
if ($query->num_rows() == 0) break;
$slug_name = $name . '-' . (++$count); // Recreate new temp name
}
return $slug_name; // Return temp name
}
或者使用count_all_results这样。删除了您的ID检查,以及我认为该子弹对于整个表来说必须是唯一的。
public function create_slug($id, $name)
{
$count = 0;
$slug_name = $name = url_title($name);
while(true)
{
$this->db->from('users')->where('slug', $slug_name);
if ($this->db->count_all_results() > 0) break;
$slug_name = $name . '-' . (++$count);
}
return $slug_name;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句