在我的slug
列中,我设置的限制为varchar = 100
,值将按此存储
how-do-i-truncate-a-string-with-dynamic-length-url-slug
我希望slug是一个unique
键,所以我用最后一个自动增量id更新slug
值,新的slug值是:
how-do-i-truncate-a-string-with-dynamic-length-url-slug-10
所以这里last auto increment
最后将是一个很大的数字..
preg_replace('/\s+?(\S+)?$/', '', substr($slugwithautoincrement, 0, 101));
使用此preg_replace
,删除我的auto increment number
问题:
如何在不删除最后一个自动增量编号的情况下将值修复截断为100个字符?
结果应该是:
how-do-i-truncate-a-string-with-[....remove from here...]10
答案 0 :(得分:1)
先截断,然后附加自动增量值。
或者做这样的事情:
$maxlength = 30;
$number = 1234567;
$string = "how-do-i-truncate-a-string-with-dynamic-length-url-slug";
$slug = substr($string, 0, $maxlength - strlen($number) - 1)."-".$number;
答案 1 :(得分:1)
这是一种方法:
$slug = "how-do-i-truncate-a-string-with-dynamic-length-url-slug-10"
$maxlen = 100;
if (strlen($slug) > $maxlen) {
$idlen = strlen($slug) - strrpos($slug, '-'); // how long is the "-10" part?
$id = substr($slug, -$idlen);
$slug = substr($slug, 0, $maxlen - $idlen).$id;
}
echo $slug;
如果$maxlen
恰好具有特定值,则此代码最终可能会在id之前使用两个连字符。这应该不是问题。
答案 2 :(得分:1)
如果在追加自动增量值之前无法截断:
$slug = explode('-', $slug);
$value = array_pop($slug);
$slug = substr(implode('-', $slug), 0, 99 - strlen($value)) . '-' . $value;